diff options
author | Marijn van der Werf <marijn.vanderwerf@gmail.com> | 2017-01-10 21:08:59 +0100 |
---|---|---|
committer | Marijn van der Werf <marijn.vanderwerf@gmail.com> | 2017-01-10 21:08:59 +0100 |
commit | 0e96421b07bf5e51a7197535262950c45391cf1f (patch) | |
tree | e68daf790e4bbbeb16c772191eddeac5905d4cba | |
parent | c4506ac9d4ca81bb33f0684e81f3b323fe773ef0 (diff) |
Continue decompiling credits
-rw-r--r-- | asm/credits.s | 2713 | ||||
-rw-r--r-- | data/credits.s | 82 | ||||
-rw-r--r-- | include/asm.inc.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/credits.c | 2047 |
5 files changed, 2086 insertions, 2759 deletions
diff --git a/asm/credits.s b/asm/credits.s deleted file mode 100644 index 860015e46..000000000 --- a/asm/credits.s +++ /dev/null @@ -1,2713 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start task_d_8144514 -task_d_8144514: @ 8144514 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r6, _08144548 @ =0x0201c000 - ldr r3, _0814454C @ =gTasks - lsls r0, 2 - add r0, r8 - lsls r0, 3 - adds r2, r0, r3 - movs r1, 0x8 - ldrsh r0, [r2, r1] - cmp r0, 0x1 - beq _08144550 - cmp r0, 0x1 - bgt _0814453C - b _08144658 -_0814453C: - cmp r0, 0x2 - beq _08144584 - cmp r0, 0x3 - bne _08144546 - b _08144644 -_08144546: - b _08144658 - .align 2, 0 -_08144548: .4byte 0x0201c000 -_0814454C: .4byte gTasks -_08144550: - adds r0, r6, 0 - adds r0, 0x8A - ldrh r0, [r0] - cmp r0, 0 - bne _0814456E - movs r4, 0xA - ldrsh r0, [r2, r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r3 - movs r4, 0x24 - ldrsh r0, [r1, r4] - cmp r0, 0 - beq _08144658 -_0814456E: - movs r0, 0xA - ldrsh r1, [r2, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r3 - movs r1, 0 - strh r1, [r0, 0x24] - ldrh r0, [r2, 0x8] - adds r0, 0x1 - b _08144656 -_08144584: - adds r0, r6, 0 - adds r0, 0x88 - ldrh r1, [r0] - mov r9, r0 - cmp r1, 0x44 - beq _08144658 - movs r4, 0xA - ldrsh r1, [r2, r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r3 - ldr r1, [r0] - ldr r0, _081445EC @ =sub_8143B68 - cmp r1, r0 - bne _08144658 - adds r7, r6, 0 - adds r7, 0x8C - ldrh r0, [r7] - lsls r0, 1 - adds r0, r6 - ldrh r0, [r0] - ldr r4, _081445F0 @ =gUnknown_0840CA00 - adds r5, r6, 0 - adds r5, 0x8A - ldrh r3, [r5] - lsls r2, r3, 1 - adds r1, r2, r4 - ldrb r1, [r1] - adds r4, 0x1 - adds r2, r4 - ldrb r2, [r2] - bl sub_81456B4 - lsls r0, 24 - lsrs r2, r0, 24 - ldrh r1, [r7] - adds r0, r6, 0 - adds r0, 0x8E - ldrh r0, [r0] - subs r0, 0x1 - cmp r1, r0 - bge _081445F8 - adds r0, r1, 0x1 - strh r0, [r7] - ldr r1, _081445F4 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - movs r1, 0x32 - b _0814460A - .align 2, 0 -_081445EC: .4byte task_a_8143B68 -_081445F0: .4byte gUnknown_0840CA00 -_081445F4: .4byte gSprites -_081445F8: - movs r0, 0 - strh r0, [r7] - ldr r1, _08144620 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - movs r1, 0x80 - lsls r1, 2 -_0814460A: - strh r1, [r0, 0x34] - mov r1, r9 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - ldrh r0, [r5] - cmp r0, 0x2 - bne _08144624 - movs r0, 0 - b _08144626 - .align 2, 0 -_08144620: .4byte gSprites -_08144624: - adds r0, 0x1 -_08144626: - strh r0, [r5] - ldr r0, _08144640 @ =gTasks - mov r2, r8 - lsls r1, r2, 2 - add r1, r8 - lsls r1, 3 - adds r1, r0 - movs r0, 0x32 - strh r0, [r1, 0xE] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _08144658 - .align 2, 0 -_08144640: .4byte gTasks -_08144644: - ldrh r1, [r2, 0xE] - movs r3, 0xE - ldrsh r0, [r2, r3] - cmp r0, 0 - beq _08144654 - subs r0, r1, 0x1 - strh r0, [r2, 0xE] - b _08144658 -_08144654: - movs r0, 0x1 -_08144656: - strh r0, [r2, 0x8] -_08144658: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end task_d_8144514 - - thumb_func_start sub_8144664 -sub_8144664: @ 8144664 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _0814468C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r2, 0x8 - ldrsh r0, [r0, r2] - adds r6, r1, 0 - cmp r0, 0x32 - bls _08144680 - b _0814492C -_08144680: - lsls r0, 2 - ldr r1, _08144690 @ =_08144694 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0814468C: .4byte gTasks -_08144690: .4byte _08144694 - .align 2, 0 -_08144694: - .4byte _08144760 - .4byte _08144784 - .4byte _081447D8 - .4byte _081447F0 - .4byte _0814482C - .4byte _08144850 - .4byte _0814489C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _081448A8 - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _081448C8 - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _081448EC - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _0814492C - .4byte _08144920 -_08144760: - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r6 - ldrh r0, [r4, 0x12] - lsls r0, 16 - asrs r0, 17 - movs r1, 0x7F - ands r0, r1 - movs r1, 0xC - bl Sin - ldr r1, _08144780 @ =gUnknown_0203935A - strh r0, [r1] - b _081447A8 - .align 2, 0 -_08144780: .4byte gUnknown_0203935A -_08144784: - ldr r7, _081447B0 @ =gUnknown_0203935A - movs r3, 0 - ldrsh r4, [r7, r3] - cmp r4, 0 - beq _081447B4 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r6 - ldrh r0, [r4, 0x12] - lsls r0, 16 - asrs r0, 17 - movs r1, 0x7F - ands r0, r1 - movs r1, 0xC - bl Sin - strh r0, [r7] -_081447A8: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - b _0814492C - .align 2, 0 -_081447B0: .4byte gUnknown_0203935A -_081447B4: - ldr r3, _081447D4 @ =gSprites - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r6 - movs r0, 0xC - ldrsh r2, [r1, r0] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r3 - movs r2, 0x2 - strh r2, [r0, 0x2E] - strh r4, [r1, 0x12] - b _08144848 - .align 2, 0 -_081447D4: .4byte gSprites -_081447D8: - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r1, r0, r6 - ldrh r2, [r1, 0x12] - movs r3, 0x12 - ldrsh r0, [r1, r3] - cmp r0, 0x3F - bgt _08144848 - adds r0, r2, 0x1 - strh r0, [r1, 0x12] - b _08144866 -_081447F0: - ldr r3, _08144828 @ =gSprites - lsls r2, r5, 2 - adds r2, r5 - lsls r2, 3 - adds r2, r6 - movs r0, 0xC - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r1, 0x3 - strh r1, [r0, 0x2E] - movs r0, 0xE - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r1, 0x1 - strh r1, [r0, 0x2E] - movs r0, 0x78 - strh r0, [r2, 0x10] - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - b _0814492C - .align 2, 0 -_08144828: .4byte gSprites -_0814482C: - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r1, r0, r6 - ldrh r2, [r1, 0x10] - movs r3, 0x10 - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _08144844 - subs r0, r2, 0x1 - strh r0, [r1, 0x10] - b _0814492C -_08144844: - movs r0, 0x40 - strh r0, [r1, 0x12] -_08144848: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _0814492C -_08144850: - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r6 - ldrh r1, [r4, 0x12] - movs r2, 0x12 - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _0814487C - subs r0, r1, 0x1 - strh r0, [r4, 0x12] -_08144866: - movs r1, 0x7F - ands r0, r1 - movs r1, 0x14 - bl Sin - ldr r1, _08144878 @ =gUnknown_0203935A - strh r0, [r1] - b _0814492C - .align 2, 0 -_08144878: .4byte gUnknown_0203935A -_0814487C: - ldr r2, _08144898 @ =gSprites - movs r3, 0xC - ldrsh r1, [r4, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x1 - strh r1, [r0, 0x2E] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _0814492C - .align 2, 0 -_08144898: .4byte gSprites -_0814489C: - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r6 - movs r1, 0x32 - b _0814492A -_081448A8: - ldr r3, _081448C4 @ =gSprites - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r6 - movs r0, 0xE - ldrsh r2, [r1, r0] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r3 - movs r2, 0x2 - b _081448E0 - .align 2, 0 -_081448C4: .4byte gSprites -_081448C8: - ldr r3, _081448E8 @ =gSprites - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r6 - movs r0, 0xC - ldrsh r2, [r1, r0] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r3 - movs r2, 0x4 -_081448E0: - strh r2, [r0, 0x2E] - movs r0, 0x32 - strh r0, [r1, 0x8] - b _0814492C - .align 2, 0 -_081448E8: .4byte gSprites -_081448EC: - ldr r3, _0814491C @ =gSprites - lsls r2, r5, 2 - adds r2, r5 - lsls r2, 3 - adds r2, r6 - movs r0, 0xC - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r1, 0x5 - strh r1, [r0, 0x2E] - movs r0, 0xE - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r1, 0x3 - strh r1, [r0, 0x2E] - movs r0, 0x32 - strh r0, [r2, 0x8] - b _0814492C - .align 2, 0 -_0814491C: .4byte gSprites -_08144920: - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r6 - movs r1, 0 -_0814492A: - strh r1, [r0, 0x8] -_0814492C: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8144664 - - thumb_func_start sub_8144934 -sub_8144934: @ 8144934 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _08144958 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - movs r3, 0x8 - ldrsh r0, [r0, r3] - adds r4, r1, 0 - cmp r0, 0x4 - bhi _08144974 - lsls r0, 2 - ldr r1, _0814495C @ =_08144960 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08144958: .4byte gTasks -_0814495C: .4byte _08144960 - .align 2, 0 -_08144960: - .4byte _08144974 - .4byte _081449B8 - .4byte _081449C4 - .4byte _08144A0C - .4byte _08144A5C -_08144974: - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r2, r0, r4 - movs r1, 0xA - ldrsh r0, [r2, r1] - ldr r5, _081449C0 @ =0x00007fff - cmp r0, r5 - beq _081449B8 - movs r3, 0xC - ldrsh r1, [r2, r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r3, r0, r4 - movs r0, 0x26 - ldrsh r1, [r3, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - movs r1, 0xC - ldrsh r0, [r0, r1] - cmp r0, 0x2 - bne _081449B8 - movs r1, 0xA - ldrsh r0, [r3, r1] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r4 - movs r0, 0x14 - strh r0, [r1, 0x8] - strh r5, [r2, 0xA] -_081449B8: - movs r0, 0 - bl sub_8149020 - b _08144A62 - .align 2, 0 -_081449C0: .4byte 0x00007fff -_081449C4: - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r2, r0, r4 - movs r3, 0xA - ldrsh r0, [r2, r3] - ldr r5, _08144A08 @ =0x00007fff - cmp r0, r5 - beq _08144A54 - movs r0, 0xC - ldrsh r1, [r2, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - movs r3, 0xA - ldrsh r1, [r0, r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r3, r0, r4 - ldrh r1, [r3, 0x12] - movs r0, 0x80 - negs r0, r0 - ands r0, r1 - movs r1, 0xA0 - lsls r1, 2 - cmp r0, r1 - bne _08144A54 - movs r0, 0x1 - strh r0, [r3, 0x8] - strh r5, [r2, 0xA] - b _08144A54 - .align 2, 0 -_08144A08: .4byte 0x00007fff -_08144A0C: - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r2, r0, r4 - ldrh r3, [r2, 0xA] - movs r0, 0xA - ldrsh r1, [r2, r0] - ldr r5, _08144A48 @ =0x00007fff - cmp r1, r5 - beq _08144A54 - ldr r0, _08144A4C @ =0x000001f3 - cmp r1, r0 - bne _08144A50 - movs r3, 0xC - ldrsh r1, [r2, r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - movs r3, 0xA - ldrsh r1, [r0, r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - movs r1, 0xA - strh r1, [r0, 0x8] - strh r5, [r2, 0xA] - b _08144A54 - .align 2, 0 -_08144A48: .4byte 0x00007fff -_08144A4C: .4byte 0x000001f3 -_08144A50: - adds r0, r3, 0x1 - strh r0, [r2, 0xA] -_08144A54: - movs r0, 0x1 - bl sub_8149020 - b _08144A62 -_08144A5C: - movs r0, 0x2 - bl sub_8149020 -_08144A62: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8144934 - - thumb_func_start sub_8144A68 -sub_8144A68: @ 8144A68 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r7, r1, 24 - cmp r0, 0x4 - bls _08144A7E - b _08144DFC -_08144A7E: - lsls r0, 2 - ldr r1, _08144A88 @ =_08144A8C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08144A88: .4byte _08144A8C - .align 2, 0 -_08144A8C: - .4byte _08144AA0 - .4byte _08144B48 - .4byte _08144BF4 - .4byte _08144CA0 - .4byte _08144D50 -_08144AA0: - ldr r5, _08144B40 @ =gSprites - ldr r0, _08144B44 @ =gTasks - lsls r4, r7, 2 - adds r4, r7 - lsls r4, 3 - adds r4, r0 - movs r1, 0x12 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x5 - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - strb r0, [r1] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r1, [r0] - ands r2, r1 - strb r2, [r0] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r3, 0 - movs r2, 0x88 - lsls r2, 1 - strh r2, [r0, 0x20] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r2, [r0, 0x20] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r2, 0x2E - strh r2, [r0, 0x22] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r2, [r0, 0x22] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r3, [r0, 0x2E] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r3, [r0, 0x2E] - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - movs r2, 0x20 - b _08144DF0 - .align 2, 0 -_08144B40: .4byte gSprites -_08144B44: .4byte gTasks -_08144B48: - ldr r5, _08144BEC @ =gSprites - ldr r0, _08144BF0 @ =gTasks - lsls r4, r7, 2 - adds r4, r7 - lsls r4, 3 - adds r4, r0 - movs r1, 0x12 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x5 - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - strb r0, [r1] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r1, [r0] - ands r2, r1 - strb r2, [r0] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r3, 0 - movs r1, 0x78 - strh r1, [r0, 0x20] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x88 - lsls r1, 1 - strh r1, [r0, 0x20] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r2, 0x2E - strh r2, [r0, 0x22] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r2, [r0, 0x22] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r3, [r0, 0x2E] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r3, [r0, 0x2E] - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - movs r2, 0x20 - b _08144DF0 - .align 2, 0 -_08144BEC: .4byte gSprites -_08144BF0: .4byte gTasks -_08144BF4: - ldr r5, _08144C98 @ =gSprites - ldr r0, _08144C9C @ =gTasks - lsls r4, r7, 2 - adds r4, r7 - lsls r4, 3 - adds r4, r0 - movs r1, 0x12 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x5 - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - strb r0, [r1] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r1, [r0] - ands r2, r1 - strb r2, [r0] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r3, 0 - movs r1, 0x78 - strh r1, [r0, 0x20] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x88 - lsls r1, 1 - strh r1, [r0, 0x20] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r2, 0x2E - strh r2, [r0, 0x22] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r2, [r0, 0x22] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r3, [r0, 0x2E] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r3, [r0, 0x2E] - movs r1, 0x80 - lsls r1, 6 - movs r2, 0x80 - lsls r2, 2 - movs r0, 0x1 - b _08144DF0 - .align 2, 0 -_08144C98: .4byte gSprites -_08144C9C: .4byte gTasks -_08144CA0: - ldr r5, _08144D44 @ =gSprites - ldr r0, _08144D48 @ =gTasks - lsls r4, r7, 2 - adds r4, r7 - lsls r4, 3 - adds r4, r0 - movs r1, 0x12 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x5 - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - strb r0, [r1] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r1, [r0] - ands r2, r1 - strb r2, [r0] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r3, 0 - movs r1, 0x78 - strh r1, [r0, 0x20] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _08144D4C @ =0x0000ffe0 - strh r1, [r0, 0x20] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r2, 0x2E - strh r2, [r0, 0x22] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r2, [r0, 0x22] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r3, [r0, 0x2E] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r3, [r0, 0x2E] - movs r1, 0x80 - lsls r1, 6 - movs r2, 0x80 - lsls r2, 2 - movs r0, 0x1 - b _08144DF0 - .align 2, 0 -_08144D44: .4byte gSprites -_08144D48: .4byte gTasks -_08144D4C: .4byte 0x0000ffe0 -_08144D50: - ldr r5, _08144EBC @ =gSprites - ldr r0, _08144EC0 @ =gTasks - lsls r4, r7, 2 - adds r4, r7 - lsls r4, 3 - adds r4, r0 - movs r1, 0x12 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x5 - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - strb r0, [r1] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r1, [r0] - ands r2, r1 - strb r2, [r0] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r3, 0 - movs r1, 0x58 - strh r1, [r0, 0x20] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x98 - strh r1, [r0, 0x20] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r2, 0x2E - strh r2, [r0, 0x22] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r2, [r0, 0x22] - movs r0, 0x12 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r3, [r0, 0x2E] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r3, [r0, 0x2E] - movs r1, 0x80 - lsls r1, 6 - movs r2, 0x80 - lsls r2, 2 - movs r0, 0x2 -_08144DF0: - movs r3, 0x8 - bl sub_8148EC0 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x8] -_08144DFC: - ldr r0, _08144EC4 @ =sub_8144934 - movs r1, 0 - bl CreateTask - ldr r6, _08144EC0 @ =gTasks - lsls r1, r7, 2 - adds r1, r7 - lsls r1, 3 - adds r5, r1, r6 - lsls r0, 24 - lsrs r0, 24 - movs r4, 0 - strh r0, [r5, 0xC] - movs r0, 0xC - ldrsh r1, [r5, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - mov r1, r8 - strh r1, [r0, 0x8] - movs r0, 0xC - ldrsh r1, [r5, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - strh r4, [r0, 0xA] - movs r0, 0xC - ldrsh r1, [r5, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - strh r7, [r0, 0xC] - ldr r0, _08144EC8 @ =sub_8144664 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0xA] - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - strh r4, [r0, 0x8] - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - strh r7, [r0, 0xA] - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - ldrh r1, [r5, 0x12] - strh r1, [r0, 0xC] - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - ldrh r1, [r5, 0x14] - strh r1, [r0, 0xE] - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - strh r4, [r0, 0x10] - mov r1, r8 - cmp r1, 0x2 - bne _08144EB0 - movs r1, 0xA - ldrsh r0, [r5, r1] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r6 - movs r0, 0x45 - strh r0, [r1, 0x12] -_08144EB0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08144EBC: .4byte gSprites -_08144EC0: .4byte gTasks -_08144EC4: .4byte sub_8144934 -_08144EC8: .4byte sub_8144664 - thumb_func_end sub_8144A68 - - thumb_func_start sub_8144ECC -sub_8144ECC: @ 8144ECC - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r0, _08144F28 @ =gMain - ldr r1, _08144F2C @ =0x0000043c - adds r6, r0, r1 - ldrb r0, [r6] - cmp r0, 0x1 - beq _08144F38 - cmp r0, 0x1 - ble _08144EF0 - cmp r0, 0x2 - beq _08144F5C - cmp r0, 0x3 - bne _08144EF0 - b _0814508C -_08144EF0: - movs r0, 0x80 - lsls r0, 19 - movs r1, 0 - strh r1, [r0] - ldr r2, _08144F30 @ =REG_BG3HOFS - movs r0, 0x8 - strh r0, [r2] - ldr r0, _08144F34 @ =REG_BG3VOFS - strh r1, [r0] - subs r0, 0x6 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - subs r0, 0x6 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x3A - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - bl ResetSpriteData - bl FreeAllSpritePalettes - movs r0, 0x1 - strb r0, [r6] - b _081450A2 - .align 2, 0 -_08144F28: .4byte gMain -_08144F2C: .4byte 0x0000043c -_08144F30: .4byte REG_BG3HOFS -_08144F34: .4byte REG_BG3VOFS -_08144F38: - ldr r1, _08144F54 @ =gUnknown_02039358 - movs r0, 0x22 - strh r0, [r1] - ldr r1, _08144F58 @ =gUnknown_0203935A - movs r0, 0 - strh r0, [r1] - adds r0, r4, 0 - bl sub_8148CB0 - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - b _081450A2 - .align 2, 0 -_08144F54: .4byte gUnknown_02039358 -_08144F58: .4byte gUnknown_0203935A -_08144F5C: - ldr r0, _08144FBC @ =gSaveBlock2 - ldrb r0, [r0, 0x8] - cmp r0, 0 - bne _08144FE0 - ldr r0, _08144FC0 @ =gIntro2BrendanSpriteSheet - bl LoadCompressedObjectPic - ldr r0, _08144FC4 @ =gUnknown_08416E34 - bl LoadCompressedObjectPic - ldr r0, _08144FC8 @ =gIntro2BicycleSpriteSheet - bl LoadCompressedObjectPic - ldr r0, _08144FCC @ =gIntro2SpritePalettes - bl LoadSpritePalettes - movs r0, 0x78 - movs r1, 0x2E - bl intro_create_brendan_sprite - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _08144FD0 @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r0 - strh r2, [r4, 0x12] - ldr r6, _08144FD4 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r5, r6, 0 - adds r5, 0x1C - adds r2, r0, r5 - ldr r1, _08144FD8 @ =sub_8145378 - str r1, [r2] - adds r6, 0x8 - adds r0, r6 - ldr r1, _08144FDC @ =gUnknown_0840CA54 - str r1, [r0] - movs r0, 0x88 - lsls r0, 1 - movs r1, 0x2E - bl intro_create_may_sprite - b _08145034 - .align 2, 0 -_08144FBC: .4byte gSaveBlock2 -_08144FC0: .4byte gIntro2BrendanSpriteSheet -_08144FC4: .4byte gUnknown_08416E34 -_08144FC8: .4byte gIntro2BicycleSpriteSheet -_08144FCC: .4byte gIntro2SpritePalettes -_08144FD0: .4byte gTasks -_08144FD4: .4byte gSprites -_08144FD8: .4byte sub_8145378 -_08144FDC: .4byte gUnknown_0840CA54 -_08144FE0: - ldr r0, _0814505C @ =gIntro2MaySpriteSheet - bl LoadCompressedObjectPic - ldr r0, _08145060 @ =gUnknown_08416E24 - bl LoadCompressedObjectPic - ldr r0, _08145064 @ =gIntro2BicycleSpriteSheet - bl LoadCompressedObjectPic - ldr r0, _08145068 @ =gIntro2SpritePalettes - bl LoadSpritePalettes - movs r0, 0x78 - movs r1, 0x2E - bl intro_create_may_sprite - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _0814506C @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r0 - strh r2, [r4, 0x12] - ldr r6, _08145070 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r5, r6, 0 - adds r5, 0x1C - adds r2, r0, r5 - ldr r1, _08145074 @ =sub_8145378 - str r1, [r2] - adds r6, 0x8 - adds r0, r6 - ldr r1, _08145078 @ =gUnknown_0840CA54 - str r1, [r0] - movs r0, 0x88 - lsls r0, 1 - movs r1, 0x2E - bl intro_create_brendan_sprite -_08145034: - lsls r0, 24 - lsrs r2, r0, 24 - strh r2, [r4, 0x14] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r5, r0, r5 - ldr r1, _0814507C @ =sub_8145420 - str r1, [r5] - adds r0, r6 - ldr r1, _08145080 @ =gUnknown_0840CA94 - str r1, [r0] - ldr r1, _08145084 @ =gMain - ldr r0, _08145088 @ =0x0000043c - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _081450A2 - .align 2, 0 -_0814505C: .4byte gIntro2MaySpriteSheet -_08145060: .4byte gUnknown_08416E24 -_08145064: .4byte gIntro2BicycleSpriteSheet -_08145068: .4byte gIntro2SpritePalettes -_0814506C: .4byte gTasks -_08145070: .4byte gSprites -_08145074: .4byte sub_8145378 -_08145078: .4byte gUnknown_0840CA54 -_0814507C: .4byte sub_8145420 -_08145080: .4byte gUnknown_0840CA94 -_08145084: .4byte gMain -_08145088: .4byte 0x0000043c -_0814508C: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8144A68 - adds r0, r4, 0 - bl sub_8148E90 - movs r0, 0 - strb r0, [r6] - movs r0, 0x1 - b _081450A4 -_081450A2: - movs r0, 0 -_081450A4: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8144ECC - - thumb_func_start sub_81450AC -sub_81450AC: @ 81450AC - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08145120 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - ldrh r1, [r4, 0x8] - movs r2, 0x8 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _081450D2 - lsls r0, r1, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - strh r0, [r4, 0x8] -_081450D2: - ldrh r1, [r4, 0xA] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _081450E8 - lsls r0, r1, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - strh r0, [r4, 0xA] -_081450E8: - ldrh r1, [r4, 0xC] - movs r2, 0xC - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _081450FE - lsls r0, r1, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - strh r0, [r4, 0xC] -_081450FE: - ldrh r1, [r4, 0xE] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _08145114 - lsls r0, r1, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - strh r0, [r4, 0xE] -_08145114: - ldr r1, _08145124 @ =gUnknown_0203935C - movs r0, 0x1 - strh r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08145120: .4byte gTasks -_08145124: .4byte gUnknown_0203935C - thumb_func_end sub_81450AC - - thumb_func_start sub_8145128 -sub_8145128: @ 8145128 - push {r4-r7,lr} - adds r3, r0, 0 - adds r4, r2, 0 - lsls r3, 16 - lsrs r3, 16 - lsls r1, 16 - lsrs r7, r1, 16 - lsls r4, 16 - lsrs r5, r4, 16 - ldr r0, _081451EC @ =gCreditsCopyrightEnd_Gfx - movs r6, 0xC0 - lsls r6, 19 - adds r3, r6 - adds r1, r3, 0 - bl LZ77UnCompVram - ldr r0, _081451F0 @ =gIntroCopyright_Pal - adds r1, r5, 0 - movs r2, 0x20 - bl LoadPalette - lsrs r4, 20 - lsls r4, 28 - lsrs r4, 16 - movs r2, 0 - adds r1, r4, 0x1 - ldr r3, _081451F4 @ =0x000003ff -_0814515E: - lsls r0, r2, 1 - adds r0, r7 - adds r0, r6 - strh r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, r3 - bls _0814515E - movs r2, 0 - adds r0, r4, 0x2 - adds r6, r4, 0 - adds r6, 0x17 - movs r1, 0x2B - adds r1, r4 - mov r12, r1 - adds r4, 0x42 - ldr r5, _081451F8 @ =0x060001c8 - adds r3, r0, 0 -_08145184: - lsls r0, r2, 1 - adds r0, r7 - adds r0, r5 - adds r1, r2, r3 - strh r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x14 - bls _08145184 - movs r2, 0 - ldr r5, _081451FC @ =0x06000248 - adds r3, r6, 0 -_0814519E: - lsls r0, r2, 1 - adds r0, r7 - adds r0, r5 - adds r1, r2, r3 - strh r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x13 - bls _0814519E - movs r2, 0 - ldr r5, _08145200 @ =0x060002c8 - mov r3, r12 -_081451B8: - lsls r0, r2, 1 - adds r0, r7 - adds r0, r5 - adds r1, r2, r3 - strh r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x16 - bls _081451B8 - movs r2, 0 - ldr r3, _08145204 @ =0x06000348 -_081451D0: - lsls r0, r2, 1 - adds r0, r7 - adds r0, r3 - adds r1, r2, r4 - strh r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0xB - bls _081451D0 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081451EC: .4byte gCreditsCopyrightEnd_Gfx -_081451F0: .4byte gIntroCopyright_Pal -_081451F4: .4byte 0x000003ff -_081451F8: .4byte 0x060001c8 -_081451FC: .4byte 0x06000248 -_08145200: .4byte 0x060002c8 -_08145204: .4byte 0x06000348 - thumb_func_end sub_8145128 - - thumb_func_start sub_8145208 -sub_8145208: @ 8145208 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - adds r3, r2, 0 - movs r0, 0x3F - ands r0, r2 - adds r1, r0, 0 - adds r1, 0x50 - cmp r2, 0xFF - bne _08145220 - movs r0, 0x1 - b _08145246 -_08145220: - movs r0, 0x80 - ands r0, r2 - cmp r0, 0 - beq _08145230 - movs r2, 0x80 - lsls r2, 4 - adds r0, r2, 0 - orrs r1, r0 -_08145230: - movs r0, 0x40 - ands r3, r0 - cmp r3, 0 - beq _08145244 - movs r2, 0x80 - lsls r2, 3 - adds r0, r2, 0 - orrs r1, r0 - lsls r0, r1, 16 - lsrs r1, r0, 16 -_08145244: - adds r0, r1, 0 -_08145246: - pop {r1} - bx r1 - thumb_func_end sub_8145208 - - thumb_func_start sub_814524C -sub_814524C: @ 814524C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - str r0, [sp] - ldr r0, [sp, 0x2C] - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x4] - lsls r3, 16 - lsrs r3, 16 - str r3, [sp, 0x8] - lsls r0, 16 - lsrs r0, 20 - lsls r0, 28 - lsrs r0, 16 - mov r9, r0 - movs r5, 0 -_0814527A: - movs r4, 0 - lsls r7, r5, 1 - ldr r1, [sp, 0x4] - adds r0, r1, r5 - adds r2, r5, 0x1 - mov r8, r2 - lsls r0, 6 - ldr r1, [sp, 0x8] - adds r6, r0, r1 -_0814528C: - adds r0, r7, r5 - adds r0, r4 - ldr r2, [sp] - adds r0, r2, r0 - ldrb r0, [r0] - bl sub_8145208 - mov r2, r10 - adds r1, r2, r4 - lsls r1, 1 - adds r1, r6 - movs r2, 0xC0 - lsls r2, 19 - adds r1, r2 - add r0, r9 - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _0814528C - mov r1, r8 - lsls r0, r1, 24 - lsrs r5, r0, 24 - cmp r5, 0x4 - bls _0814527A - 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_814524C - - thumb_func_start sub_81452D0 -sub_81452D0: @ 81452D0 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 16 - lsrs r5, r0, 16 - lsls r1, 16 - lsrs r6, r1, 16 - lsrs r1, 20 - lsls r1, 28 - lsrs r1, 16 - movs r2, 0 - ldr r7, _08145360 @ =gUnknown_0840B83C - movs r4, 0xC0 - lsls r4, 19 - adds r1, 0x1 - ldr r3, _08145364 @ =0x000003ff -_081452EE: - lsls r0, r2, 1 - adds r0, r5 - adds r0, r4 - strh r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, r3 - bls _081452EE - str r6, [sp] - adds r0, r7, 0 - movs r1, 0x3 - movs r2, 0x7 - adds r3, r5, 0 - bl sub_814524C - ldr r0, _08145368 @ =gUnknown_0840B84B - str r6, [sp] - movs r1, 0x7 - movs r2, 0x7 - adds r3, r5, 0 - bl sub_814524C - ldr r4, _0814536C @ =gUnknown_0840B85A - str r6, [sp] - adds r0, r4, 0 - movs r1, 0xB - movs r2, 0x7 - adds r3, r5, 0 - bl sub_814524C - str r6, [sp] - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0x7 - adds r3, r5, 0 - bl sub_814524C - ldr r0, _08145370 @ =gUnknown_0840B869 - str r6, [sp] - movs r1, 0x14 - movs r2, 0x7 - adds r3, r5, 0 - bl sub_814524C - ldr r0, _08145374 @ =gUnknown_0840B878 - str r6, [sp] - movs r1, 0x18 - movs r2, 0x7 - adds r3, r5, 0 - bl sub_814524C - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08145360: .4byte gUnknown_0840B83C -_08145364: .4byte 0x000003ff -_08145368: .4byte gUnknown_0840B84B -_0814536C: .4byte gUnknown_0840B85A -_08145370: .4byte gUnknown_0840B869 -_08145374: .4byte gUnknown_0840B878 - thumb_func_end sub_81452D0 - - thumb_func_start sub_8145378 -sub_8145378: @ 8145378 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08145390 @ =gUnknown_0203935C - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _08145394 - adds r0, r4, 0 - bl DestroySprite - b _08145418 - .align 2, 0 -_08145390: .4byte gUnknown_0203935C -_08145394: - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0x5 - bhi _08145418 - lsls r0, 2 - ldr r1, _081453A8 @ =_081453AC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081453A8: .4byte _081453AC - .align 2, 0 -_081453AC: - .4byte _081453C4 - .4byte _081453CE - .4byte _081453D4 - .4byte _081453DE - .4byte _081453E8 - .4byte _081453FE -_081453C4: - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnimIfDifferent - b _08145418 -_081453CE: - adds r0, r4, 0 - movs r1, 0x1 - b _08145402 -_081453D4: - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnimIfDifferent - b _08145418 -_081453DE: - adds r0, r4, 0 - movs r1, 0x3 - bl StartSpriteAnimIfDifferent - b _08145418 -_081453E8: - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnimIfDifferent - ldrh r1, [r4, 0x20] - movs r2, 0x20 - ldrsh r0, [r4, r2] - cmp r0, 0x78 - ble _08145418 - subs r0, r1, 0x1 - b _08145416 -_081453FE: - adds r0, r4, 0 - movs r1, 0 -_08145402: - bl StartSpriteAnimIfDifferent - ldrh r2, [r4, 0x20] - movs r0, 0x20 - ldrsh r1, [r4, r0] - movs r0, 0x20 - negs r0, r0 - cmp r1, r0 - ble _08145418 - subs r0, r2, 0x1 -_08145416: - strh r0, [r4, 0x20] -_08145418: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8145378 - - thumb_func_start sub_8145420 -sub_8145420: @ 8145420 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08145438 @ =gUnknown_0203935C - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _0814543C - adds r0, r4, 0 - bl DestroySprite - b _081454D8 - .align 2, 0 -_08145438: .4byte gUnknown_0203935C -_0814543C: - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _08145464 - cmp r0, 0x1 - bgt _0814544E - cmp r0, 0 - beq _08145458 - b _081454D8 -_0814544E: - cmp r0, 0x2 - beq _081454A0 - cmp r0, 0x3 - beq _081454BE - b _081454D8 -_08145458: - strh r0, [r4, 0x26] - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnimIfDifferent - b _081454D8 -_08145464: - movs r1, 0x20 - ldrsh r0, [r4, r1] - cmp r0, 0xC8 - ble _08145476 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnimIfDifferent - b _0814547E -_08145476: - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnimIfDifferent -_0814547E: - ldrh r2, [r4, 0x20] - movs r0, 0x20 - ldrsh r1, [r4, r0] - movs r0, 0x20 - negs r0, r0 - cmp r1, r0 - ble _08145490 - subs r0, r2, 0x2 - strh r0, [r4, 0x20] -_08145490: - ldr r0, _0814549C @ =gUnknown_0203935A - ldrh r0, [r0] - negs r0, r0 - strh r0, [r4, 0x26] - b _081454D8 - .align 2, 0 -_0814549C: .4byte gUnknown_0203935A -_081454A0: - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnimIfDifferent - ldrh r1, [r4, 0x3C] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - bne _081454D8 - ldrh r0, [r4, 0x20] - adds r0, 0x1 - b _081454D6 -_081454BE: - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnimIfDifferent - ldrh r2, [r4, 0x20] - movs r0, 0x20 - ldrsh r1, [r4, r0] - movs r0, 0x20 - negs r0, r0 - cmp r1, r0 - ble _081454D8 - subs r0, r2, 0x1 -_081454D6: - strh r0, [r4, 0x20] -_081454D8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8145420 - - thumb_func_start sub_81454E0 -sub_81454E0: @ 81454E0 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - ldr r0, _081454F8 @ =gUnknown_0203935C - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _081454FC - adds r0, r5, 0 - bl DestroySprite - b _081456A6 - .align 2, 0 -_081454F8: .4byte gUnknown_0203935C -_081454FC: - ldrh r0, [r5, 0x3C] - adds r0, 0x1 - strh r0, [r5, 0x3C] - movs r2, 0x2E - ldrsh r0, [r5, r2] - cmp r0, 0xA - bhi _08145544 - lsls r0, 2 - ldr r1, _08145514 @ =_08145518 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08145514: .4byte _08145518 - .align 2, 0 -_08145518: - .4byte _08145544 - .4byte _0814559E - .4byte _08145620 - .4byte _08145660 - .4byte _08145544 - .4byte _08145544 - .4byte _08145544 - .4byte _08145544 - .4byte _08145544 - .4byte _08145544 - .4byte _08145696 -_08145544: - ldrb r1, [r5, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r5, 0x1] - movs r0, 0x30 - ldrsh r1, [r5, r0] - movs r0, 0x1F - ands r1, r0 - lsls r1, 1 - ldrb r2, [r5, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x3] - movs r0, 0x10 - strh r0, [r5, 0x32] - ldrh r4, [r5, 0x30] - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x80 - lsls r0, 9 - movs r1, 0x10 - bl __divsi3 - adds r1, r0, 0 - str r1, [sp] - adds r0, r4, 0 - movs r2, 0 - movs r3, 0 - bl SetOamMatrix - adds r2, r5, 0 - adds r2, 0x3E - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - movs r0, 0x1 - strh r0, [r5, 0x2E] - b _081456A6 -_0814559E: - ldrh r1, [r5, 0x32] - movs r2, 0x32 - ldrsh r0, [r5, r2] - cmp r0, 0xFF - bgt _081455D4 - adds r0, r1, 0 - adds r0, 0x8 - strh r0, [r5, 0x32] - ldrh r4, [r5, 0x30] - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x32 - ldrsh r1, [r5, r0] - movs r0, 0x80 - lsls r0, 9 - bl __divsi3 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp] - adds r0, r4, 0 - movs r2, 0 - movs r3, 0 - bl SetOamMatrix - b _081455DA -_081455D4: - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] -_081455DA: - movs r2, 0x30 - ldrsh r1, [r5, r2] - cmp r1, 0x2 - beq _081456A6 - cmp r1, 0x2 - bgt _081455EC - cmp r1, 0x1 - beq _081455F2 - b _081456A6 -_081455EC: - cmp r1, 0x3 - beq _0814560A - b _081456A6 -_081455F2: - ldrh r1, [r5, 0x3C] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - bne _08145602 - ldrh r0, [r5, 0x22] - adds r0, 0x1 - strh r0, [r5, 0x22] -_08145602: - ldrh r0, [r5, 0x20] - subs r0, 0x2 - strh r0, [r5, 0x20] - b _081456A6 -_0814560A: - ldrh r0, [r5, 0x3C] - ands r1, r0 - cmp r1, 0 - bne _08145618 - ldrh r0, [r5, 0x22] - adds r0, 0x1 - strh r0, [r5, 0x22] -_08145618: - ldrh r0, [r5, 0x20] - adds r0, 0x2 - strh r0, [r5, 0x20] - b _081456A6 -_08145620: - ldrh r1, [r5, 0x34] - movs r2, 0x34 - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _08145630 - subs r0, r1, 0x1 - strh r0, [r5, 0x34] - b _081456A6 -_08145630: - ldr r1, _0814565C @ =REG_BLDCNT - movs r2, 0xF4 - lsls r2, 4 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x10 - strh r0, [r1] - ldrb r1, [r5, 0x1] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r5, 0x1] - movs r0, 0x10 - strh r0, [r5, 0x34] - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - b _081456A6 - .align 2, 0 -_0814565C: .4byte REG_BLDCNT -_08145660: - ldrh r1, [r5, 0x34] - movs r2, 0x34 - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _08145684 - subs r1, 0x1 - strh r1, [r5, 0x34] - ldr r3, _08145680 @ =REG_BLDALPHA - movs r0, 0x34 - ldrsh r2, [r5, r0] - movs r0, 0x10 - subs r0, r2 - lsls r0, 8 - adds r1, r0 - strh r1, [r3] - b _081456A6 - .align 2, 0 -_08145680: .4byte REG_BLDALPHA -_08145684: - adds r2, r5, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - movs r0, 0xA - strh r0, [r5, 0x2E] - b _081456A6 -_08145696: - ldr r0, _081456B0 @ =REG_BLDCNT - movs r1, 0 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, r5, 0 - bl DestroySprite -_081456A6: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081456B0: .4byte REG_BLDCNT - thumb_func_end sub_81454E0 - - thumb_func_start sub_81456B4 -sub_81456B4: @ 81456B4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 16 - lsrs r1, 16 - mov r10, r1 - lsls r2, 16 - lsrs r2, 16 - str r2, [sp, 0x10] - lsls r3, 16 - lsrs r3, 16 - mov r9, r3 - adds r0, r6, 0 - bl NationalPokedexNumToSpecies - adds r6, r0, 0 - cmp r6, 0xC9 - beq _081456F8 - movs r0, 0x9A - lsls r0, 1 - cmp r6, r0 - beq _081456EE - movs r7, 0 - b _081456FC -_081456EE: - ldr r0, _081456F4 @ =gSaveBlock2 - ldr r7, [r0, 0x20] - b _081456FC - .align 2, 0 -_081456F4: .4byte gSaveBlock2 -_081456F8: - ldr r0, _081457E8 @ =gSaveBlock2 - ldr r7, [r0, 0x1C] -_081456FC: - lsls r0, r6, 3 - ldr r1, _081457EC @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _081457F0 @ =gMonFrontPicCoords - lsls r2, r6, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _081457F4 @ =gUnknown_0840B5A0 - mov r8, r4 - mov r5, r9 - lsls r4, r5, 2 - add r4, r8 - ldr r4, [r4] - str r4, [sp] - str r6, [sp, 0x4] - str r7, [sp, 0x8] - movs r4, 0x1 - str r4, [sp, 0xC] - bl LoadSpecialPokePic - ldr r2, _081457F8 @ =0x0000ffff - adds r0, r6, 0 - movs r1, 0 - bl species_and_otid_get_pal - lsls r5, 4 - mov r8, r5 - movs r1, 0x80 - lsls r1, 1 - add r1, r8 - lsls r1, 16 - lsrs r1, 16 - movs r2, 0x20 - bl LoadCompressedPalette - mov r7, r9 - lsls r6, r7, 24 - lsrs r6, 24 - mov r0, r9 - adds r1, r6, 0 - bl sub_8143648 - ldr r0, _081457FC @ =gUnknown_02024E8C - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - ldr r3, [sp, 0x10] - lsls r2, r3, 16 - asrs r2, 16 - movs r3, 0 - bl CreateSprite - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _08145800 @ =gSprites - lsls r2, r4, 4 - adds r2, r4 - lsls r2, 2 - adds r3, r2, r5 - ldrb r1, [r3, 0x5] - movs r0, 0xF - ands r0, r1 - mov r7, r8 - orrs r0, r7 - movs r1, 0xD - negs r1, r1 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3, 0x5] - mov r0, r9 - adds r0, 0x1 - strh r0, [r3, 0x30] - movs r0, 0x3E - adds r0, r3 - mov r8, r0 - ldrb r0, [r0] - orrs r0, r1 - mov r1, r8 - strb r0, [r1] - adds r0, r5, 0 - adds r0, 0x1C - adds r2, r0 - ldr r0, _08145804 @ =sub_81454E0 - str r0, [r2] - ldr r0, _08145808 @ =gSpriteTemplate_840CAEC - movs r2, 0x20 - ldrsh r1, [r3, r2] - movs r7, 0x22 - ldrsh r2, [r3, r7] - movs r3, 0x1 - bl CreateSprite - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r4, [r0, 0x2E] - adds r1, r6, 0 - bl StartSpriteAnimIfDifferent - adds r0, r4, 0 - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081457E8: .4byte gSaveBlock2 -_081457EC: .4byte gMonFrontPicTable -_081457F0: .4byte gMonFrontPicCoords -_081457F4: .4byte gUnknown_0840B5A0 -_081457F8: .4byte 0x0000ffff -_081457FC: .4byte gUnknown_02024E8C -_08145800: .4byte gSprites -_08145804: .4byte sub_81454E0 -_08145808: .4byte gSpriteTemplate_840CAEC - thumb_func_end sub_81456B4 - - thumb_func_start sub_814580C -sub_814580C: @ 814580C - push {r4,lr} - adds r3, r0, 0 - ldr r4, _08145838 @ =gSprites - movs r1, 0x2E - ldrsh r0, [r3, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - movs r2, 0x2E - ldrsh r0, [r1, r2] - cmp r0, 0xA - beq _08145830 - ldr r0, _0814583C @ =gUnknown_0203935C - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0 - beq _08145840 -_08145830: - adds r0, r3, 0 - bl DestroySprite - b _081458D4 - .align 2, 0 -_08145838: .4byte gSprites -_0814583C: .4byte gUnknown_0203935C -_08145840: - adds r0, r1, 0 - adds r0, 0x3E - ldrb r0, [r0] - movs r1, 0x3E - adds r1, r3 - mov r12, r1 - movs r1, 0x4 - ands r1, r0 - mov r0, r12 - ldrb r2, [r0] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - movs r2, 0x2E - ldrsh r1, [r3, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0, 0x1] - movs r0, 0xC - ands r0, r1 - ldrb r2, [r3, 0x1] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x1] - movs r0, 0x2E - ldrsh r2, [r3, r0] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x1] - lsls r0, 30 - lsrs r0, 30 - movs r2, 0x4 - negs r2, r2 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x1] - movs r2, 0x2E - ldrsh r1, [r3, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x3] - movs r1, 0x3E - ands r1, r0 - ldrb r2, [r3, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x3] - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r0, [r0, 0x20] - strh r0, [r3, 0x20] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r0, [r0, 0x22] - strh r0, [r3, 0x22] -_081458D4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_814580C - - thumb_func_start sub_81458DC -sub_81458DC: @ 81458DC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r7, _0814597C @ =0x0201c000 - ldr r0, _08145980 @ =0x00004023 - bl VarGet - lsls r0, 16 - lsrs r0, 16 - bl GetStarterPokemon - lsls r0, 16 - lsrs r0, 16 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - movs r4, 0x1 - movs r5, 0 - ldr r0, _08145984 @ =0x00000181 - mov r8, r0 -_0814590E: - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8090D90 - lsls r0, 24 - adds r6, r7, 0 - adds r6, 0x90 - cmp r0, 0 - beq _0814592C - lsls r0, r5, 1 - adds r0, r6, r0 - strh r4, [r0] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_0814592C: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r8 - bls _0814590E - adds r4, r5, 0 - ldr r0, _08145984 @ =0x00000181 - lsls r1, r4, 16 - mov r9, r1 - movs r2, 0x8E - adds r2, r7 - mov r8, r2 - adds r1, r7, 0 - adds r1, 0x86 - str r1, [sp] - cmp r4, r0 - bhi _08145964 - adds r1, r6, 0 - movs r3, 0 - adds r2, r0, 0 -_08145954: - lsls r0, r4, 1 - adds r0, r1, r0 - strh r3, [r0] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r2 - bls _08145954 -_08145964: - movs r2, 0xE5 - lsls r2, 2 - adds r0, r7, r2 - strh r5, [r0] - mov r1, r9 - lsrs r0, r1, 16 - cmp r0, 0x43 - bhi _08145988 - mov r2, r8 - strh r5, [r2] - b _0814598E - .align 2, 0 -_0814597C: .4byte 0x0201c000 -_08145980: .4byte 0x00004023 -_08145984: .4byte 0x00000181 -_08145988: - movs r0, 0x44 - mov r1, r8 - strh r0, [r1] -_0814598E: - movs r5, 0 - movs r2, 0xE5 - lsls r2, 2 - adds r4, r7, r2 - mov r9, r5 - b _0814599E -_0814599A: - cmp r5, 0x43 - bhi _081459EE -_0814599E: - bl Random - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r4] - bl __umodsi3 - lsls r0, 16 - lsrs r2, r0, 16 - lsls r1, r5, 1 - adds r1, r7, r1 - lsls r0, r2, 1 - adds r3, r6, r0 - ldrh r0, [r3] - strh r0, [r1] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - mov r0, r9 - strh r0, [r3] - ldrh r0, [r4] - subs r0, 0x1 - strh r0, [r4] - lsls r0, 16 - lsrs r0, 16 - cmp r2, r0 - beq _081459E8 - ldrh r0, [r4] - lsls r0, 1 - adds r0, r6, r0 - ldrh r0, [r0] - strh r0, [r3] - ldrh r0, [r4] - lsls r0, 1 - adds r0, r6, r0 - mov r1, r9 - strh r1, [r0] -_081459E8: - ldrh r0, [r4] - cmp r0, 0 - bne _0814599A -_081459EE: - mov r2, r8 - ldrh r0, [r2] - cmp r0, 0x43 - bhi _08145A26 - adds r5, r0, 0 - movs r2, 0 - cmp r5, 0x43 - bhi _08145A5C - mov r3, r8 -_08145A00: - lsls r1, r5, 1 - adds r1, r7, r1 - lsls r0, r2, 1 - adds r0, r7, r0 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - ldrh r0, [r3] - cmp r2, r0 - bne _08145A1A - movs r2, 0 -_08145A1A: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x43 - bls _08145A00 - b _08145A5C -_08145A26: - movs r4, 0 - ldrh r0, [r7] - cmp r0, r10 - beq _08145A42 -_08145A2E: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - lsls r0, r4, 1 - adds r0, r7, r0 - ldrh r0, [r0] - cmp r0, r10 - beq _08145A42 - cmp r4, 0x43 - bls _08145A2E -_08145A42: - mov r1, r8 - ldrh r0, [r1] - subs r0, 0x1 - cmp r4, r0 - bge _08145A5C - lsls r0, r4, 1 - adds r0, r7, r0 - ldr r2, [sp] - ldrh r1, [r2] - strh r1, [r0] - mov r0, r10 - strh r0, [r2] - b _08145A62 -_08145A5C: - mov r2, r10 - ldr r1, [sp] - strh r2, [r1] -_08145A62: - movs r0, 0x44 - mov r1, r8 - strh r0, [r1] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81458DC - - .align 2, 0 @ Don't pad with nop. diff --git a/data/credits.s b/data/credits.s index c6e0ad536..8bbf71a7a 100644 --- a/data/credits.s +++ b/data/credits.s @@ -29,34 +29,66 @@ gUnknown_0840B878:: gUnknown_0840CA00:: @ 840CA00 .incbin "baserom.gba", 0x0040ca00, 0x8 -Unknown_840CA08: - .incbin "baserom.gba", 0x0040ca08, 0x14 -Unknown_840CA1C: - .incbin "baserom.gba", 0x0040ca1c, 0x14 -Unknown_840CA30: - .incbin "baserom.gba", 0x0040ca30, 0x10 -Unknown_840CA40: - .incbin "baserom.gba", 0x0040ca40, 0x14 + +gSpriteAnim_840CA08: + obj_image_anim_frame 0, 8 + obj_image_anim_frame 64, 8 + obj_image_anim_frame 128, 8 + obj_image_anim_frame 192, 8 + obj_image_anim_jump 0 + +gSpriteAnim_840CA1C: + obj_image_anim_frame 0, 4 + obj_image_anim_frame 64, 4 + obj_image_anim_frame 128, 4 + obj_image_anim_frame 192, 4 + obj_image_anim_jump 0 + +gSpriteAnim_840CA30: + obj_image_anim_frame 256, 4 + obj_image_anim_frame 320, 4 + obj_image_anim_frame 384, 4 + obj_image_anim_end + +gSpriteAnim_840CA40: + obj_image_anim_frame 384, 30 + obj_image_anim_frame 320, 30 + obj_image_anim_frame 256, 30 + obj_image_anim_frame 256, 30 + obj_image_anim_end .align 2 -gUnknown_0840CA54:: @ 840CA54 - .4byte Unknown_840CA08 - .4byte Unknown_840CA1C - .4byte Unknown_840CA30 - .4byte Unknown_840CA40 - -Unknown_840CA64: - .incbin "baserom.gba", 0x0040ca64, 0x14 -Unknown_840CA78: - .incbin "baserom.gba", 0x0040ca78, 0x14 -Unknown_840CA8C: - .incbin "baserom.gba", 0x0040ca8c, 0x8 +gSpriteAnimTable_0840CA54:: @ 840CA54 + .4byte gSpriteAnim_840CA08 + .4byte gSpriteAnim_840CA1C + .4byte gSpriteAnim_840CA30 + .4byte gSpriteAnim_840CA40 + + +gSpriteAnim_840CA64: + obj_image_anim_frame 0, 8 + obj_image_anim_frame 64, 8 + obj_image_anim_frame 128, 8 + obj_image_anim_frame 192, 8 + obj_image_anim_jump 0 + +gSpriteAnim_840CA78: + obj_image_anim_frame 0, 4 + obj_image_anim_frame 64, 4 + obj_image_anim_frame 128, 4 + obj_image_anim_frame 192, 4 + obj_image_anim_jump 0 + +gSpriteAnim_840CA8C: + obj_image_anim_frame 0, 4 + obj_image_anim_end .align 2 -gUnknown_0840CA94:: @ 840CA94 - .4byte Unknown_840CA64 - .4byte Unknown_840CA78 - .4byte Unknown_840CA8C +gSpriteAnimTable_0840CA94:: @ 840CA94 + .4byte gSpriteAnim_840CA64 + .4byte gSpriteAnim_840CA78 + .4byte gSpriteAnim_840CA8C + gUnknown_0840CAA0:: @ 840CAA0 obj_tiles gHallOfFame, 6144, 1001 @@ -95,4 +127,4 @@ gSpriteAnimTable_840CAE0:: @ 840CAE0 .align 2 gSpriteTemplate_840CAEC:: @ 840CAEC - spr_template 1001, 1001, gOamData_840CAC0, gSpriteAnimTable_840CAE0, NULL, gDummySpriteAffineAnimTable, sub_814580C + spr_template 1001, 1001, gOamData_840CAC0, gSpriteAnimTable_840CAE0, NULL, gDummySpriteAffineAnimTable, spritecb_814580C diff --git a/include/asm.inc.h b/include/asm.inc.h index c415cd825..43a25a231 100644 --- a/include/asm.inc.h +++ b/include/asm.inc.h @@ -478,6 +478,8 @@ void DoBrailleStrengthEffect(void); // asm/intro_credits_graphics.o void load_intro_part2_graphics(/*TODO: arg types*/); void sub_8148C78(/*TODO: arg types*/); +void sub_8148CB0(u8); +void sub_8148E90(u8); u8 sub_8148EC0(/*TODO: arg types*/); void sub_8149020(/*TODO: arg types*/); u8 intro_create_brendan_sprite(/*TODO: arg types*/); diff --git a/ld_script.txt b/ld_script.txt index b258669dc..190df293c 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -228,7 +228,6 @@ SECTIONS { asm/battle_anim_813F0F4.o(.text); asm/hall_of_fame.o(.text); src/credits.o(.text); - asm/credits.o(.text); src/lottery_corner.o(.text); src/diploma.o(.text); src/berry_tag_screen.o(.text); diff --git a/src/credits.c b/src/credits.c index 665279f8e..d6eea4cac 100644 --- a/src/credits.c +++ b/src/credits.c @@ -1,14 +1,36 @@ #include "global.h" +#include "asm.h" +#include "decompress.h" #include "m4a.h" #include "main.h" #include "menu.h" #include "palette.h" #include "songs.h" #include "sound.h" +#include "species.h" #include "sprite.h" #include "task.h" #include "text.h" +u32 NationalPokedexNumToSpecies(u16 nationalNum); + +struct MonCoords { + u8 x, y; +}; + + +extern void *species_and_otid_get_pal(u32, u16, u16); + +asm(".set REG_BASE, 0x4000000"); +asm(".set OFFSET_REG_BG3HOFS, 0x1c"); +asm(".set OFFSET_REG_BG3VOFS, 0x1e"); +asm(".set OFFSET_REG_BLDCNT, 0x50"); +asm(".set OFFSET_REG_BLDALPHA, 0x52"); +asm(".set REG_BG3HOFS, REG_BASE + OFFSET_REG_BG3HOFS"); +asm(".set REG_BG3VOFS, REG_BASE + OFFSET_REG_BG3VOFS"); +asm(".set REG_BLDCNT, REG_BASE + OFFSET_REG_BLDCNT"); +asm(".set REG_BLDALPHA, REG_BASE + OFFSET_REG_BLDALPHA"); + enum { PAGE_TITLE, PAGE_DIRECTOR, @@ -74,8 +96,11 @@ enum { enum { TDA_0 = 0, TDA_TASK_C_ID = 1, + TDA_TASK_E_ID = 2, TDA_TASK_D_ID = 3, TDA_4 = 4, + TDA_PLAYER_CYCLIST = 5, + TDA_RIVAL_CYCLIST = 6, TDA_7 = 7, // Has something to do with the bike scene TDA_11 = 11, // Gets set depending on whether the bike or the grass scene should be shown TDA_12 = 12, @@ -90,10 +115,20 @@ enum { TDB_3 = 3, TDC_0 = 0, - - TDD_0 = 0, - TDD_1 = 1, + TDC_1 = 1, + TDC_2 = 2, + TDC_3 = 3, + TDC_4 = 4, + TDC_5 = 5, + + TDD_STATE = 0, + TDD_TASK_A_ID = 1, TDD_2 = 2, + TDD_3 = 3, + + TDE_0 = 0, + TDE_1 = 1, + TDE_TASK_A_ID = 2, }; struct Unk201C000 { @@ -101,6 +136,7 @@ struct Unk201C000 { u16 var_88; u16 var_8A; u16 var_8C; + u16 var_8E; }; struct HallOfFame { @@ -121,30 +157,60 @@ extern u8 unk_201e800[0x800]; extern u8 unk_201f000[0x800]; extern u16 unk_201f800[]; +extern struct SpriteTemplate gUnknown_02024E8C; + extern s16 gUnknown_02039320; extern u16 gUnknown_02039322; // TASK A extern u8 gUnknown_02039324; extern u8 gUnknown_02039325; -extern u16 gUnknown_0203935C; + +extern u16 gUnknown_02039358; +extern u16 gUnknown_0203935A; +extern s16 gUnknown_0203935C; + extern u8 gReservedSpritePaletteCount; +// data/data2 +extern struct MonCoords gMonFrontPicCoords[]; +extern struct SpriteSheet gMonFrontPicTable[]; + // data/starter_choose extern u16 gBirchBagGrassPal[32]; extern u8 gBirchBagTilemap[]; extern u8 gBirchHelpGfx[]; -// data/credits +// data/hall_of_fame +extern void *gUnknown_0840B5A0[]; + +// data/credits extern u16 gUnknown_0840B7BC[32]; extern u16 gUnknown_0840B7FC[32]; +extern u8 gUnknown_0840B85A[]; extern struct CreditsEntry *gCreditsEntryPointerTable[][5]; +extern u8 gUnknown_0840CA00[][2]; extern struct SpriteSheet gUnknown_0840CAA0; extern struct SpritePalette gUnknown_0840CAB0; +extern union AnimCmd *gSpriteAnimTable_0840CA54[]; +extern union AnimCmd *gSpriteAnimTable_0840CA94[]; +extern struct SpriteTemplate gSpriteTemplate_840CAEC; + +// data/intro_credits_graphics +extern const struct SpriteSheet gIntro2BrendanSpriteSheet; +extern const struct SpriteSheet gIntro2MaySpriteSheet; +extern const struct SpriteSheet gIntro2BicycleSpriteSheet; +extern const struct SpritePalette gIntro2SpritePalettes[]; +extern const struct SpriteSheet gUnknown_08416E24; +extern const struct SpriteSheet gUnknown_08416E34; + +// graphics +extern u8 gCreditsCopyrightEnd_Gfx[]; +extern u16 gIntroCopyright_Pal[16]; static void task_a_8143B38(u8 taskIdA); -void task_a_8143B68(u8 taskIdA); +static void task_a_8143B68(u8 taskIdA); static void task_a_8143BFC(u8 taskIdA); -static void task_a_080C9BFC(u8 taskIdA); +static void task_a_80C9BFC(u8 taskIdA); static void task_a_8143CC0(u8 taskIdA); static void task_a_8143D04(u8 taskIdA); static void task_a_8143EBC(u8 taskIdA); @@ -157,12 +223,14 @@ static void task_a_8144114(u8 taskIdA); static void sub_8144130(void); static void task_b_81441B8(u8 taskIdB); static u8 sub_8144454(u8 page, u8 taskIdA); - void task_d_8144514(u8 taskIdD); -u8 sub_8144ECC(u8 data, u8 taskIdA); -void sub_81450AC(u8 taskIdA); +static bool8 sub_8144ECC(u8 data, u8 taskIdA); +static void sub_81450AC(u8 taskIdA); void sub_8145128(u16, u16, u16); -void sub_81452D0(int, int); +void sub_81452D0(u16 arg0, u16 arg1); +static void spritecb_player_8145378(struct Sprite *sprite); +static void spritecb_rival_8145420(struct Sprite *sprite); +u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3); void sub_81458DC(void); static void vblank_8143948(void) { @@ -245,7 +313,6 @@ void sub_81439D0(void) { BeginNormalPaletteFade(-1, 0, 16, 0, 0); - savedIme = REG_IME; REG_IME = 0; REG_IE |= INTR_FLAG_VBLANK; @@ -269,7 +336,7 @@ void sub_81439D0(void) { gUnknown_02039322 = taskIdA; } -void task_a_8143B38(u8 taskIdA) { +static void task_a_8143B38(u8 taskIdA) { if (gPaletteFade.active) { return; @@ -278,7 +345,7 @@ void task_a_8143B38(u8 taskIdA) { gTasks[taskIdA].func = task_a_8143B68; } -void task_a_8143B68(u8 taskIdA) { +static void task_a_8143B68(u8 taskIdA) { u16 data11; if (gTasks[taskIdA].data[TDA_4]) @@ -320,10 +387,10 @@ static void task_a_8143BFC(u8 taskIdA) { REG_DISPCNT = 0; sub_81450AC(taskIdA); - gTasks[taskIdA].func = task_a_080C9BFC; + gTasks[taskIdA].func = task_a_80C9BFC; } -static void task_a_080C9BFC(u8 taskIdA) { +static void task_a_80C9BFC(u8 taskIdA) { u16 backup; SetVBlankCallback(NULL); @@ -357,7 +424,7 @@ static void task_a_8143CC0(u8 taskIdA) { } #ifdef NONMATCHING -static void task_a_8143D04(u8 taskIdA) { +void task_a_8143D04(u8 taskIdA) { switch (gMain.state) { default: case 0: { @@ -396,8 +463,8 @@ static void task_a_8143D04(u8 taskIdA) { case 1: { gTasks[taskIdA].data[TDA_TASK_D_ID] = CreateTask(task_d_8144514, 0); - gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_0] = 1; - gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_1] = taskIdA; + gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_STATE] = 1; + gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_TASK_A_ID] = taskIdA; gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_2] = gTasks[taskIdA].data[TDA_7]; BeginNormalPaletteFade(-1, 0, 16, 0, 0); @@ -415,7 +482,7 @@ static void task_a_8143D04(u8 taskIdA) { } #else __attribute__((naked)) -static void task_a_8143D04(u8 taskId) { +void task_a_8143D04(u8 taskId) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ mov r7, r9\n\ @@ -612,6 +679,7 @@ _08143EB4: .4byte gUnknown_0203935C\n\ _08143EB8: .4byte task_a_8143B38\n\ .syntax divided\n"); } + #endif static void task_a_8143EBC(u8 taskIdA) { @@ -935,3 +1003,1942 @@ static u8 sub_8144454(u8 page, u8 taskIdA) { return FALSE; } + +#define UNK_DEFINE_44 (0x44) + +#ifdef NONMATCHING +void task_d_8144514(u8 taskIdD) { + u8 local1; + + switch (gTasks[taskIdD].data[TDD_STATE]) + { + case 0: + break; + + case 1: + if (unk_201C000.var_8A == 0 && gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14]) + { + break; + } + + gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] = 0; + gTasks[taskIdD].data[TDD_STATE] += 1; + + break; + + case 2: + if (unk_201C000.var_88 == UNK_DEFINE_44) + { + break; + } + + if (gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != task_a_8143B68) + { + break; + } + + local1 = sub_81456B4( + unk_201C000.var_00[unk_201C000.var_8C], + gUnknown_0840CA00[unk_201C000.var_8A][0], + gUnknown_0840CA00[unk_201C000.var_8A][1], + unk_201C000.var_8A + ); + + if (unk_201C000.var_8C > unk_201C000.var_8E - 1) + { + unk_201C000.var_8C += 1; + gSprites[local1].data3 = 50; + } + else + { + unk_201C000.var_8C = 0; + gSprites[local1].data3 = 512; + } + + unk_201C000.var_88 += 1; + + if (unk_201C000.var_8A == 2) + { + unk_201C000.var_8A = 0; + } + else + { + unk_201C000.var_8A += 1; + } + + gTasks[taskIdD].data[TDD_3] = 50; + gTasks[taskIdD].data[TDD_STATE] += 1; + break; + + case 3: + if (gTasks[taskIdD].data[TDD_3] != 0) + { + gTasks[taskIdD].data[TDD_3] -= 1; + break; + } + + gTasks[taskIdD].data[TDD_STATE] = 1; + break; + } +} +#else +__attribute__((naked)) +void task_d_8144514(u8 taskIdD) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + ldr r6, _08144548 @ =0x0201c000\n\ + ldr r3, _0814454C @ =gTasks\n\ + lsls r0, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + adds r2, r0, r3\n\ + movs r1, 0x8\n\ + ldrsh r0, [r2, r1]\n\ + cmp r0, 0x1\n\ + beq _08144550\n\ + cmp r0, 0x1\n\ + bgt _0814453C\n\ + b _08144658\n\ +_0814453C:\n\ + cmp r0, 0x2\n\ + beq _08144584\n\ + cmp r0, 0x3\n\ + bne _08144546\n\ + b _08144644\n\ +_08144546:\n\ + b _08144658\n\ + .align 2, 0\n\ +_08144548: .4byte 0x0201c000\n\ +_0814454C: .4byte gTasks\n\ +_08144550:\n\ + adds r0, r6, 0\n\ + adds r0, 0x8A\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + bne _0814456E\n\ + movs r4, 0xA\n\ + ldrsh r0, [r2, r4]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 3\n\ + adds r1, r3\n\ + movs r4, 0x24\n\ + ldrsh r0, [r1, r4]\n\ + cmp r0, 0\n\ + beq _08144658\n\ +_0814456E:\n\ + movs r0, 0xA\n\ + ldrsh r1, [r2, r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r3\n\ + movs r1, 0\n\ + strh r1, [r0, 0x24]\n\ + ldrh r0, [r2, 0x8]\n\ + adds r0, 0x1\n\ + b _08144656\n\ +_08144584:\n\ + adds r0, r6, 0\n\ + adds r0, 0x88\n\ + ldrh r1, [r0]\n\ + mov r9, r0\n\ + cmp r1, 0x44\n\ + beq _08144658\n\ + movs r4, 0xA\n\ + ldrsh r1, [r2, r4]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r3\n\ + ldr r1, [r0]\n\ + ldr r0, _081445EC @ =sub_8143B68\n\ + cmp r1, r0\n\ + bne _08144658\n\ + adds r7, r6, 0\n\ + adds r7, 0x8C\n\ + ldrh r0, [r7]\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + ldr r4, _081445F0 @ =gUnknown_0840CA00\n\ + adds r5, r6, 0\n\ + adds r5, 0x8A\n\ + ldrh r3, [r5]\n\ + lsls r2, r3, 1\n\ + adds r1, r2, r4\n\ + ldrb r1, [r1]\n\ + adds r4, 0x1\n\ + adds r2, r4\n\ + ldrb r2, [r2]\n\ + bl sub_81456B4\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + ldrh r1, [r7]\n\ + adds r0, r6, 0\n\ + adds r0, 0x8E\n\ + ldrh r0, [r0]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _081445F8\n\ + adds r0, r1, 0x1\n\ + strh r0, [r7]\n\ + ldr r1, _081445F4 @ =gSprites\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + movs r1, 0x32\n\ + b _0814460A\n\ + .align 2, 0\n\ +_081445EC: .4byte task_a_8143B68\n\ +_081445F0: .4byte gUnknown_0840CA00\n\ +_081445F4: .4byte gSprites\n\ +_081445F8:\n\ + movs r0, 0\n\ + strh r0, [r7]\n\ + ldr r1, _08144620 @ =gSprites\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + movs r1, 0x80\n\ + lsls r1, 2\n\ +_0814460A:\n\ + strh r1, [r0, 0x34]\n\ + mov r1, r9\n\ + ldrh r0, [r1]\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ + ldrh r0, [r5]\n\ + cmp r0, 0x2\n\ + bne _08144624\n\ + movs r0, 0\n\ + b _08144626\n\ + .align 2, 0\n\ +_08144620: .4byte gSprites\n\ +_08144624:\n\ + adds r0, 0x1\n\ +_08144626:\n\ + strh r0, [r5]\n\ + ldr r0, _08144640 @ =gTasks\n\ + mov r2, r8\n\ + lsls r1, r2, 2\n\ + add r1, r8\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + movs r0, 0x32\n\ + strh r0, [r1, 0xE]\n\ + ldrh r0, [r1, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r1, 0x8]\n\ + b _08144658\n\ + .align 2, 0\n\ +_08144640: .4byte gTasks\n\ +_08144644:\n\ + ldrh r1, [r2, 0xE]\n\ + movs r3, 0xE\n\ + ldrsh r0, [r2, r3]\n\ + cmp r0, 0\n\ + beq _08144654\n\ + subs r0, r1, 0x1\n\ + strh r0, [r2, 0xE]\n\ + b _08144658\n\ +_08144654:\n\ + movs r0, 0x1\n\ +_08144656:\n\ + strh r0, [r2, 0x8]\n\ +_08144658:\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +__attribute__((naked)) +void task_c_8144664(u8 taskIdC) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r1, _0814468C @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + movs r2, 0x8\n\ + ldrsh r0, [r0, r2]\n\ + adds r6, r1, 0\n\ + cmp r0, 0x32\n\ + bls _08144680\n\ + b _0814492C\n\ +_08144680:\n\ + lsls r0, 2\n\ + ldr r1, _08144690 @ =_08144694\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0814468C: .4byte gTasks\n\ +_08144690: .4byte _08144694\n\ + .align 2, 0\n\ +_08144694:\n\ + .4byte _08144760\n\ + .4byte _08144784\n\ + .4byte _081447D8\n\ + .4byte _081447F0\n\ + .4byte _0814482C\n\ + .4byte _08144850\n\ + .4byte _0814489C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _081448A8\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _081448C8\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _081448EC\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _0814492C\n\ + .4byte _08144920\n\ +_08144760:\n\ + lsls r4, r5, 2\n\ + adds r4, r5\n\ + lsls r4, 3\n\ + adds r4, r6\n\ + ldrh r0, [r4, 0x12]\n\ + lsls r0, 16\n\ + asrs r0, 17\n\ + movs r1, 0x7F\n\ + ands r0, r1\n\ + movs r1, 0xC\n\ + bl Sin\n\ + ldr r1, _08144780 @ =gUnknown_0203935A\n\ + strh r0, [r1]\n\ + b _081447A8\n\ + .align 2, 0\n\ +_08144780: .4byte gUnknown_0203935A\n\ +_08144784:\n\ + ldr r7, _081447B0 @ =gUnknown_0203935A\n\ + movs r3, 0\n\ + ldrsh r4, [r7, r3]\n\ + cmp r4, 0\n\ + beq _081447B4\n\ + lsls r4, r5, 2\n\ + adds r4, r5\n\ + lsls r4, 3\n\ + adds r4, r6\n\ + ldrh r0, [r4, 0x12]\n\ + lsls r0, 16\n\ + asrs r0, 17\n\ + movs r1, 0x7F\n\ + ands r0, r1\n\ + movs r1, 0xC\n\ + bl Sin\n\ + strh r0, [r7]\n\ +_081447A8:\n\ + ldrh r0, [r4, 0x12]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x12]\n\ + b _0814492C\n\ + .align 2, 0\n\ +_081447B0: .4byte gUnknown_0203935A\n\ +_081447B4:\n\ + ldr r3, _081447D4 @ =gSprites\n\ + lsls r1, r5, 2\n\ + adds r1, r5\n\ + lsls r1, 3\n\ + adds r1, r6\n\ + movs r0, 0xC\n\ + ldrsh r2, [r1, r0]\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + movs r2, 0x2\n\ + strh r2, [r0, 0x2E]\n\ + strh r4, [r1, 0x12]\n\ + b _08144848\n\ + .align 2, 0\n\ +_081447D4: .4byte gSprites\n\ +_081447D8:\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r1, r0, r6\n\ + ldrh r2, [r1, 0x12]\n\ + movs r3, 0x12\n\ + ldrsh r0, [r1, r3]\n\ + cmp r0, 0x3F\n\ + bgt _08144848\n\ + adds r0, r2, 0x1\n\ + strh r0, [r1, 0x12]\n\ + b _08144866\n\ +_081447F0:\n\ + ldr r3, _08144828 @ =gSprites\n\ + lsls r2, r5, 2\n\ + adds r2, r5\n\ + lsls r2, 3\n\ + adds r2, r6\n\ + movs r0, 0xC\n\ + ldrsh r1, [r2, r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + movs r1, 0x3\n\ + strh r1, [r0, 0x2E]\n\ + movs r0, 0xE\n\ + ldrsh r1, [r2, r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + movs r1, 0x1\n\ + strh r1, [r0, 0x2E]\n\ + movs r0, 0x78\n\ + strh r0, [r2, 0x10]\n\ + ldrh r0, [r2, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r2, 0x8]\n\ + b _0814492C\n\ + .align 2, 0\n\ +_08144828: .4byte gSprites\n\ +_0814482C:\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r1, r0, r6\n\ + ldrh r2, [r1, 0x10]\n\ + movs r3, 0x10\n\ + ldrsh r0, [r1, r3]\n\ + cmp r0, 0\n\ + beq _08144844\n\ + subs r0, r2, 0x1\n\ + strh r0, [r1, 0x10]\n\ + b _0814492C\n\ +_08144844:\n\ + movs r0, 0x40\n\ + strh r0, [r1, 0x12]\n\ +_08144848:\n\ + ldrh r0, [r1, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r1, 0x8]\n\ + b _0814492C\n\ +_08144850:\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r4, r0, r6\n\ + ldrh r1, [r4, 0x12]\n\ + movs r2, 0x12\n\ + ldrsh r0, [r4, r2]\n\ + cmp r0, 0\n\ + ble _0814487C\n\ + subs r0, r1, 0x1\n\ + strh r0, [r4, 0x12]\n\ +_08144866:\n\ + movs r1, 0x7F\n\ + ands r0, r1\n\ + movs r1, 0x14\n\ + bl Sin\n\ + ldr r1, _08144878 @ =gUnknown_0203935A\n\ + strh r0, [r1]\n\ + b _0814492C\n\ + .align 2, 0\n\ +_08144878: .4byte gUnknown_0203935A\n\ +_0814487C:\n\ + ldr r2, _08144898 @ =gSprites\n\ + movs r3, 0xC\n\ + ldrsh r1, [r4, r3]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + movs r1, 0x1\n\ + strh r1, [r0, 0x2E]\n\ + ldrh r0, [r4, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x8]\n\ + b _0814492C\n\ + .align 2, 0\n\ +_08144898: .4byte gSprites\n\ +_0814489C:\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r6\n\ + movs r1, 0x32\n\ + b _0814492A\n\ +_081448A8:\n\ + ldr r3, _081448C4 @ =gSprites\n\ + lsls r1, r5, 2\n\ + adds r1, r5\n\ + lsls r1, 3\n\ + adds r1, r6\n\ + movs r0, 0xE\n\ + ldrsh r2, [r1, r0]\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + movs r2, 0x2\n\ + b _081448E0\n\ + .align 2, 0\n\ +_081448C4: .4byte gSprites\n\ +_081448C8:\n\ + ldr r3, _081448E8 @ =gSprites\n\ + lsls r1, r5, 2\n\ + adds r1, r5\n\ + lsls r1, 3\n\ + adds r1, r6\n\ + movs r0, 0xC\n\ + ldrsh r2, [r1, r0]\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + movs r2, 0x4\n\ +_081448E0:\n\ + strh r2, [r0, 0x2E]\n\ + movs r0, 0x32\n\ + strh r0, [r1, 0x8]\n\ + b _0814492C\n\ + .align 2, 0\n\ +_081448E8: .4byte gSprites\n\ +_081448EC:\n\ + ldr r3, _0814491C @ =gSprites\n\ + lsls r2, r5, 2\n\ + adds r2, r5\n\ + lsls r2, 3\n\ + adds r2, r6\n\ + movs r0, 0xC\n\ + ldrsh r1, [r2, r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + movs r1, 0x5\n\ + strh r1, [r0, 0x2E]\n\ + movs r0, 0xE\n\ + ldrsh r1, [r2, r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + movs r1, 0x3\n\ + strh r1, [r0, 0x2E]\n\ + movs r0, 0x32\n\ + strh r0, [r2, 0x8]\n\ + b _0814492C\n\ + .align 2, 0\n\ +_0814491C: .4byte gSprites\n\ +_08144920:\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r6\n\ + movs r1, 0\n\ +_0814492A:\n\ + strh r1, [r0, 0x8]\n\ +_0814492C:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} + +#define UNK_DEF_1F3 (499) + +void task_e_8144934(u8 taskIdE) { + s16 taskIdC; + + switch (gTasks[taskIdE].data[TDE_0]) + { + default: + case 0: + if (gTasks[taskIdE].data[TDE_1] != 0x7FFF) + { + + if (gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_B_ID]].data[TDB_CURRENT_PAGE] == PAGE_ART_DIRECTOR) + { + gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 20; + gTasks[taskIdE].data[TDE_1] = 0x7FFF; + } + } + + sub_8149020(0); + break; + + case 1: + sub_8149020(0); + break; + + case 2: + if (gTasks[taskIdE].data[TDE_1] != 0x7FFF) + { + taskIdC = gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]; + + // Floor to multiple of 128 + if ((gTasks[taskIdC].data[TDC_5] & - 128) == 640) + { + gTasks[taskIdC].data[TDC_0] = 1; + gTasks[taskIdE].data[TDE_1] = 0x7FFF; + } + } + sub_8149020(1); + break; + + case 3: + if (gTasks[taskIdE].data[TDE_1] != 0x7FFF) + { + + if (gTasks[taskIdE].data[TDE_1] == UNK_DEF_1F3) + { + gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 10; + gTasks[taskIdE].data[TDE_1] = 0x7FFF; + } + else + { + gTasks[taskIdE].data[TDE_1] += 1; + } + } + + sub_8149020(1); + break; + + case 4: + sub_8149020(2); + break; + } +} + +#define UNK_DEFINE_45 (0x45) + +static void sub_8144A68(u8 data, u8 taskIdA) { + switch (data) + { + case 0: + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 272; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gTasks[taskIdA].data[TDA_0] = sub_8148EC0(0, 0x2000, 0x20, 8); + break; + + case 1: + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gTasks[taskIdA].data[TDA_0] = sub_8148EC0(0, 0x2000, 0x20, 8); + break; + + case 2: + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gTasks[taskIdA].data[TDA_0] = sub_8148EC0(1, 0x2000, 0x200, 8); + break; + + case 3: + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = - 32; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gTasks[taskIdA].data[TDA_0] = sub_8148EC0(1, 0x2000, 0x200, 8); + break; + + case 4: + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 88; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 152; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gTasks[taskIdA].data[TDA_0] = sub_8148EC0(2, 0x2000, 0x200, 8); + break; + } + + gTasks[taskIdA].data[TDA_TASK_E_ID] = CreateTask(task_e_8144934, 0); + gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_0] = data; + gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_1] = 0; + gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_TASK_A_ID] = taskIdA; + + gTasks[taskIdA].data[TDA_TASK_C_ID] = CreateTask(task_c_8144664, 0); + gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_0] = 0; + gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_1] = taskIdA; + gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_2] = gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]; + gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_3] = gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]; + gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_4] = 0; + + if (data == 2) + { + gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_5] = UNK_DEFINE_45; + } +} + +static bool8 sub_8144ECC(u8 data, u8 taskIdA) { + u8 spriteId; + + switch (gMain.state) + { + default: + case 0: + REG_DISPCNT = 0; + REG_BG3HOFS = 8; + REG_BG3VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + ResetSpriteData(); + FreeAllSpritePalettes(); + gMain.state = 1; + break; + + case 1: + gUnknown_02039358 = 34; + gUnknown_0203935A = 0; + sub_8148CB0(data); + gMain.state += 1; + break; + + case 2: + if (gSaveBlock2.playerGender == MALE) + { + LoadCompressedObjectPic(&gIntro2BrendanSpriteSheet); + LoadCompressedObjectPic(&gUnknown_08416E34); + LoadCompressedObjectPic(&gIntro2BicycleSpriteSheet); + LoadSpritePalettes(gIntro2SpritePalettes); + + spriteId = intro_create_brendan_sprite(120, 46); + gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId; + gSprites[spriteId].callback = spritecb_player_8145378; + gSprites[spriteId].anims = gSpriteAnimTable_0840CA54; + + spriteId = intro_create_may_sprite(272, 46); + gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId; + gSprites[spriteId].callback = spritecb_rival_8145420; + gSprites[spriteId].anims = gSpriteAnimTable_0840CA94; + } + else + { + LoadCompressedObjectPic(&gIntro2MaySpriteSheet); + LoadCompressedObjectPic(&gUnknown_08416E24); + LoadCompressedObjectPic(&gIntro2BicycleSpriteSheet); + LoadSpritePalettes(gIntro2SpritePalettes); + + spriteId = intro_create_may_sprite(120, 46); + gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId; + gSprites[spriteId].callback = spritecb_player_8145378; + gSprites[spriteId].anims = gSpriteAnimTable_0840CA54; + + spriteId = intro_create_brendan_sprite(272, 46); + gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId; + gSprites[spriteId].callback = spritecb_rival_8145420; + gSprites[spriteId].anims = gSpriteAnimTable_0840CA94; + }; + + gMain.state += 1; + break; + + case 3: + sub_8144A68(data, taskIdA); + sub_8148E90(data); + gMain.state = 0; + return TRUE; + } + + return FALSE; +} + +static void sub_81450AC(u8 taskIdA) { + if (gTasks[taskIdA].data[TDA_0] != 0) + { + DestroyTask(gTasks[taskIdA].data[TDA_0]); + gTasks[taskIdA].data[TDA_0] = 0; + } + + if (gTasks[taskIdA].data[TDA_TASK_C_ID] != 0) + { + DestroyTask(gTasks[taskIdA].data[TDA_TASK_C_ID]); + gTasks[taskIdA].data[TDA_TASK_C_ID] = 0; + } + + if (gTasks[taskIdA].data[TDA_TASK_E_ID] != 0) + { + DestroyTask(gTasks[taskIdA].data[TDA_TASK_E_ID]); + gTasks[taskIdA].data[TDA_TASK_E_ID] = 0; + } + + if (gTasks[taskIdA].data[TDA_TASK_D_ID] != 0) + { + DestroyTask(gTasks[taskIdA].data[TDA_TASK_D_ID]); + gTasks[taskIdA].data[TDA_TASK_D_ID] = 0; + } + + gUnknown_0203935C = 1; +} + +__attribute__((naked)) +void sub_8145128(u16 arg0, u16 arg1, u16 arg2) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + adds r3, r0, 0\n\ + adds r4, r2, 0\n\ + lsls r3, 16\n\ + lsrs r3, 16\n\ + lsls r1, 16\n\ + lsrs r7, r1, 16\n\ + lsls r4, 16\n\ + lsrs r5, r4, 16\n\ + ldr r0, _081451EC @ =gCreditsCopyrightEnd_Gfx\n\ + movs r6, 0xC0\n\ + lsls r6, 19\n\ + adds r3, r6\n\ + adds r1, r3, 0\n\ + bl LZ77UnCompVram\n\ + ldr r0, _081451F0 @ =gIntroCopyright_Pal\n\ + adds r1, r5, 0\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + lsrs r4, 20\n\ + lsls r4, 28\n\ + lsrs r4, 16\n\ + movs r2, 0\n\ + adds r1, r4, 0x1\n\ + ldr r3, _081451F4 @ =0x000003ff\n\ +_0814515E:\n\ + lsls r0, r2, 1\n\ + adds r0, r7\n\ + adds r0, r6\n\ + strh r1, [r0]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, r3\n\ + bls _0814515E\n\ + movs r2, 0\n\ + adds r0, r4, 0x2\n\ + adds r6, r4, 0\n\ + adds r6, 0x17\n\ + movs r1, 0x2B\n\ + adds r1, r4\n\ + mov r12, r1\n\ + adds r4, 0x42\n\ + ldr r5, _081451F8 @ =0x060001c8\n\ + adds r3, r0, 0\n\ +_08145184:\n\ + lsls r0, r2, 1\n\ + adds r0, r7\n\ + adds r0, r5\n\ + adds r1, r2, r3\n\ + strh r1, [r0]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x14\n\ + bls _08145184\n\ + movs r2, 0\n\ + ldr r5, _081451FC @ =0x06000248\n\ + adds r3, r6, 0\n\ +_0814519E:\n\ + lsls r0, r2, 1\n\ + adds r0, r7\n\ + adds r0, r5\n\ + adds r1, r2, r3\n\ + strh r1, [r0]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x13\n\ + bls _0814519E\n\ + movs r2, 0\n\ + ldr r5, _08145200 @ =0x060002c8\n\ + mov r3, r12\n\ +_081451B8:\n\ + lsls r0, r2, 1\n\ + adds r0, r7\n\ + adds r0, r5\n\ + adds r1, r2, r3\n\ + strh r1, [r0]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x16\n\ + bls _081451B8\n\ + movs r2, 0\n\ + ldr r3, _08145204 @ =0x06000348\n\ +_081451D0:\n\ + lsls r0, r2, 1\n\ + adds r0, r7\n\ + adds r0, r3\n\ + adds r1, r2, r4\n\ + strh r1, [r0]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0xB\n\ + bls _081451D0\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081451EC: .4byte gCreditsCopyrightEnd_Gfx\n\ +_081451F0: .4byte gIntroCopyright_Pal\n\ +_081451F4: .4byte 0x000003ff\n\ +_081451F8: .4byte 0x060001c8\n\ +_081451FC: .4byte 0x06000248\n\ +_08145200: .4byte 0x060002c8\n\ +_08145204: .4byte 0x06000348\n\ + .syntax divided\n"); +} + +u16 sub_8145208(u8 arg0) { + + u16 out = (arg0 & 0x3F) + 80; + + if (arg0 == 0xFF) + { + return 1; + } + + if (arg0 & (1 << 7)) + { + out |= 0x800; + } + + if (arg0 & (1 << 6)) + { + out |= 0x400; + } + + return out; +} + +__attribute__((naked)) +void sub_814524C(int arg0, u8 arg1, u8 arg2, u16 arg3, int arg4) { + 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, 0xC\n\ + str r0, [sp]\n\ + ldr r0, [sp, 0x2C]\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r10, r1\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + str r2, [sp, 0x4]\n\ + lsls r3, 16\n\ + lsrs r3, 16\n\ + str r3, [sp, 0x8]\n\ + lsls r0, 16\n\ + lsrs r0, 20\n\ + lsls r0, 28\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + movs r5, 0\n\ +_0814527A:\n\ + movs r4, 0\n\ + lsls r7, r5, 1\n\ + ldr r1, [sp, 0x4]\n\ + adds r0, r1, r5\n\ + adds r2, r5, 0x1\n\ + mov r8, r2\n\ + lsls r0, 6\n\ + ldr r1, [sp, 0x8]\n\ + adds r6, r0, r1\n\ +_0814528C:\n\ + adds r0, r7, r5\n\ + adds r0, r4\n\ + ldr r2, [sp]\n\ + adds r0, r2, r0\n\ + ldrb r0, [r0]\n\ + bl sub_8145208\n\ + mov r2, r10\n\ + adds r1, r2, r4\n\ + lsls r1, 1\n\ + adds r1, r6\n\ + movs r2, 0xC0\n\ + lsls r2, 19\n\ + adds r1, r2\n\ + add r0, r9\n\ + strh r0, [r1]\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x2\n\ + bls _0814528C\n\ + mov r1, r8\n\ + lsls r0, r1, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x4\n\ + bls _0814527A\n\ + add sp, 0xC\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"); +} + +#ifdef NONMATCHING +void sub_81452D0(u16 arg0, u16 arg1) { + u16 i; + + + for (i = 0; i < 0x400; i ++) + { + (u16 *) (VRAM + ) + } + sub_814524C(&gUnknown_0840B85A, 7, 7, arg0, arg1); + sub_814524C(&gUnknown_0840B869, 11, 7, arg0, arg1); + sub_814524C(&gUnknown_0840B878, 15, 7, arg0, arg1); + sub_814524C(&gUnknown_0840B85A, 19, 7, arg0, arg1); +} +#else +__attribute__((naked)) +void sub_81452D0(u16 arg0, u16 arg1) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + sub sp, 0x4\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + lsls r1, 16\n\ + lsrs r6, r1, 16\n\ + lsrs r1, 20\n\ + lsls r1, 28\n\ + lsrs r1, 16\n\ + movs r2, 0\n\ + ldr r7, _08145360 @ =gUnknown_0840B83C\n\ + movs r4, 0xC0\n\ + lsls r4, 19\n\ + adds r1, 0x1\n\ + ldr r3, _08145364 @ =0x000003ff\n\ +_081452EE:\n\ + lsls r0, r2, 1\n\ + adds r0, r5\n\ + adds r0, r4\n\ + strh r1, [r0]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, r3\n\ + bls _081452EE\n\ + str r6, [sp]\n\ + adds r0, r7, 0\n\ + movs r1, 0x3\n\ + movs r2, 0x7\n\ + adds r3, r5, 0\n\ + bl sub_814524C\n\ + ldr r0, _08145368 @ =gUnknown_0840B84B\n\ + str r6, [sp]\n\ + movs r1, 0x7\n\ + movs r2, 0x7\n\ + adds r3, r5, 0\n\ + bl sub_814524C\n\ + ldr r4, _0814536C @ =gUnknown_0840B85A\n\ + str r6, [sp]\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + movs r2, 0x7\n\ + adds r3, r5, 0\n\ + bl sub_814524C\n\ + str r6, [sp]\n\ + adds r0, r4, 0\n\ + movs r1, 0x10\n\ + movs r2, 0x7\n\ + adds r3, r5, 0\n\ + bl sub_814524C\n\ + ldr r0, _08145370 @ =gUnknown_0840B869\n\ + str r6, [sp]\n\ + movs r1, 0x14\n\ + movs r2, 0x7\n\ + adds r3, r5, 0\n\ + bl sub_814524C\n\ + ldr r0, _08145374 @ =gUnknown_0840B878\n\ + str r6, [sp]\n\ + movs r1, 0x18\n\ + movs r2, 0x7\n\ + adds r3, r5, 0\n\ + bl sub_814524C\n\ + add sp, 0x4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08145360: .4byte gUnknown_0840B83C\n\ +_08145364: .4byte 0x000003ff\n\ +_08145368: .4byte gUnknown_0840B84B\n\ +_0814536C: .4byte gUnknown_0840B85A\n\ +_08145370: .4byte gUnknown_0840B869\n\ +_08145374: .4byte gUnknown_0840B878\n\ + .syntax divided\n"); +} +#endif + +static void spritecb_player_8145378(struct Sprite *sprite) { + if (gUnknown_0203935C != 0) + { + DestroySprite(sprite); + return; + } + + switch (sprite->data0) + { + case 0: + StartSpriteAnimIfDifferent(sprite, 0); + break; + + case 1: + StartSpriteAnimIfDifferent(sprite, 1); + if (sprite->pos1.x > - 32) + { + sprite->pos1.x -= 1; + } + break; + + case 2: + StartSpriteAnimIfDifferent(sprite, 2); + break; + + case 3: + StartSpriteAnimIfDifferent(sprite, 3); + break; + + case 4: + StartSpriteAnimIfDifferent(sprite, 0); + if (sprite->pos1.x > 120) + { + sprite->pos1.x -= 1; + } + break; + + case 5: + StartSpriteAnimIfDifferent(sprite, 0); + if (sprite->pos1.x > - 32) + { + sprite->pos1.x -= 1; + } + break; + } +} + +static void spritecb_rival_8145420(struct Sprite *sprite) { + if (gUnknown_0203935C != 0) + { + DestroySprite(sprite); + return; + } + + switch (sprite->data0) + { + case 0: + sprite->pos2.y = 0; + StartSpriteAnimIfDifferent(sprite, 0); + break; + + case 1: + if (sprite->pos1.x > 200) + { + StartSpriteAnimIfDifferent(sprite, 1); + } + else + { + StartSpriteAnimIfDifferent(sprite, 2); + } + + if (sprite->pos1.x > - 32) + { + sprite->pos1.x -= 2; + } + + sprite->pos2.y = - gUnknown_0203935A; + break; + + case 2: + sprite->data7 += 1; + StartSpriteAnimIfDifferent(sprite, 0); + + if ((sprite->data7 & 3) == 0) + { + sprite->pos1.x += 1; + } + break; + + case 3: + StartSpriteAnimIfDifferent(sprite, 0); + + if (sprite->pos1.x > - 32) + { + sprite->pos1.x -= 1; + } + break; + + + } +} + +__attribute__((naked)) +void spritecb_81454E0(struct Sprite *sprite) { + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + sub sp, 0x4\n\ + adds r5, r0, 0\n\ + ldr r0, _081454F8 @ =gUnknown_0203935C\n\ + movs r1, 0\n\ + ldrsh r0, [r0, r1]\n\ + cmp r0, 0\n\ + beq _081454FC\n\ + adds r0, r5, 0\n\ + bl DestroySprite\n\ + b _081456A6\n\ + .align 2, 0\n\ +_081454F8: .4byte gUnknown_0203935C\n\ +_081454FC:\n\ + ldrh r0, [r5, 0x3C]\n\ + adds r0, 0x1\n\ + strh r0, [r5, 0x3C]\n\ + movs r2, 0x2E\n\ + ldrsh r0, [r5, r2]\n\ + cmp r0, 0xA\n\ + bhi _08145544\n\ + lsls r0, 2\n\ + ldr r1, _08145514 @ =_08145518\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08145514: .4byte _08145518\n\ + .align 2, 0\n\ +_08145518:\n\ + .4byte _08145544\n\ + .4byte _0814559E\n\ + .4byte _08145620\n\ + .4byte _08145660\n\ + .4byte _08145544\n\ + .4byte _08145544\n\ + .4byte _08145544\n\ + .4byte _08145544\n\ + .4byte _08145544\n\ + .4byte _08145544\n\ + .4byte _08145696\n\ +_08145544:\n\ + ldrb r1, [r5, 0x1]\n\ + movs r0, 0x4\n\ + negs r0, r0\n\ + ands r0, r1\n\ + movs r1, 0x1\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x1]\n\ + movs r0, 0x30\n\ + ldrsh r1, [r5, r0]\n\ + movs r0, 0x1F\n\ + ands r1, r0\n\ + lsls r1, 1\n\ + ldrb r2, [r5, 0x3]\n\ + movs r0, 0x3F\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x3]\n\ + movs r0, 0x10\n\ + strh r0, [r5, 0x32]\n\ + ldrh r4, [r5, 0x30]\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + movs r0, 0x80\n\ + lsls r0, 9\n\ + movs r1, 0x10\n\ + bl __divsi3\n\ + adds r1, r0, 0\n\ + str r1, [sp]\n\ + adds r0, r4, 0\n\ + movs r2, 0\n\ + movs r3, 0\n\ + bl SetOamMatrix\n\ + adds r2, r5, 0\n\ + adds r2, 0x3E\n\ + ldrb r1, [r2]\n\ + movs r0, 0x5\n\ + negs r0, r0\n\ + ands r0, r1\n\ + strb r0, [r2]\n\ + movs r0, 0x1\n\ + strh r0, [r5, 0x2E]\n\ + b _081456A6\n\ +_0814559E:\n\ + ldrh r1, [r5, 0x32]\n\ + movs r2, 0x32\n\ + ldrsh r0, [r5, r2]\n\ + cmp r0, 0xFF\n\ + bgt _081455D4\n\ + adds r0, r1, 0\n\ + adds r0, 0x8\n\ + strh r0, [r5, 0x32]\n\ + ldrh r4, [r5, 0x30]\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + movs r0, 0x32\n\ + ldrsh r1, [r5, r0]\n\ + movs r0, 0x80\n\ + lsls r0, 9\n\ + bl __divsi3\n\ + adds r1, r0, 0\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + str r1, [sp]\n\ + adds r0, r4, 0\n\ + movs r2, 0\n\ + movs r3, 0\n\ + bl SetOamMatrix\n\ + b _081455DA\n\ +_081455D4:\n\ + ldrh r0, [r5, 0x2E]\n\ + adds r0, 0x1\n\ + strh r0, [r5, 0x2E]\n\ +_081455DA:\n\ + movs r2, 0x30\n\ + ldrsh r1, [r5, r2]\n\ + cmp r1, 0x2\n\ + beq _081456A6\n\ + cmp r1, 0x2\n\ + bgt _081455EC\n\ + cmp r1, 0x1\n\ + beq _081455F2\n\ + b _081456A6\n\ +_081455EC:\n\ + cmp r1, 0x3\n\ + beq _0814560A\n\ + b _081456A6\n\ +_081455F2:\n\ + ldrh r1, [r5, 0x3C]\n\ + movs r0, 0x3\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08145602\n\ + ldrh r0, [r5, 0x22]\n\ + adds r0, 0x1\n\ + strh r0, [r5, 0x22]\n\ +_08145602:\n\ + ldrh r0, [r5, 0x20]\n\ + subs r0, 0x2\n\ + strh r0, [r5, 0x20]\n\ + b _081456A6\n\ +_0814560A:\n\ + ldrh r0, [r5, 0x3C]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _08145618\n\ + ldrh r0, [r5, 0x22]\n\ + adds r0, 0x1\n\ + strh r0, [r5, 0x22]\n\ +_08145618:\n\ + ldrh r0, [r5, 0x20]\n\ + adds r0, 0x2\n\ + strh r0, [r5, 0x20]\n\ + b _081456A6\n\ +_08145620:\n\ + ldrh r1, [r5, 0x34]\n\ + movs r2, 0x34\n\ + ldrsh r0, [r5, r2]\n\ + cmp r0, 0\n\ + beq _08145630\n\ + subs r0, r1, 0x1\n\ + strh r0, [r5, 0x34]\n\ + b _081456A6\n\ +_08145630:\n\ + ldr r1, _0814565C @ =REG_BLDCNT\n\ + movs r2, 0xF4\n\ + lsls r2, 4\n\ + adds r0, r2, 0\n\ + strh r0, [r1]\n\ + adds r1, 0x2\n\ + movs r0, 0x10\n\ + strh r0, [r1]\n\ + ldrb r1, [r5, 0x1]\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r1\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + strb r0, [r5, 0x1]\n\ + movs r0, 0x10\n\ + strh r0, [r5, 0x34]\n\ + ldrh r0, [r5, 0x2E]\n\ + adds r0, 0x1\n\ + strh r0, [r5, 0x2E]\n\ + b _081456A6\n\ + .align 2, 0\n\ +_0814565C: .4byte REG_BLDCNT\n\ +_08145660:\n\ + ldrh r1, [r5, 0x34]\n\ + movs r2, 0x34\n\ + ldrsh r0, [r5, r2]\n\ + cmp r0, 0\n\ + beq _08145684\n\ + subs r1, 0x1\n\ + strh r1, [r5, 0x34]\n\ + ldr r3, _08145680 @ =REG_BLDALPHA\n\ + movs r0, 0x34\n\ + ldrsh r2, [r5, r0]\n\ + movs r0, 0x10\n\ + subs r0, r2\n\ + lsls r0, 8\n\ + adds r1, r0\n\ + strh r1, [r3]\n\ + b _081456A6\n\ + .align 2, 0\n\ +_08145680: .4byte REG_BLDALPHA\n\ +_08145684:\n\ + adds r2, r5, 0\n\ + adds r2, 0x3E\n\ + ldrb r0, [r2]\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + movs r0, 0xA\n\ + strh r0, [r5, 0x2E]\n\ + b _081456A6\n\ +_08145696:\n\ + ldr r0, _081456B0 @ =REG_BLDCNT\n\ + movs r1, 0\n\ + strh r1, [r0]\n\ + adds r0, 0x2\n\ + strh r1, [r0]\n\ + adds r0, r5, 0\n\ + bl DestroySprite\n\ +_081456A6:\n\ + add sp, 0x4\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081456B0: .4byte REG_BLDCNT\n\ + .syntax divided\n"); +} + +#ifdef NONMATCHING +u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3) { + u32 species; + u32 personality; + void *palette; + u8 spriteId; + u8 spriteId2; + + species = NationalPokedexNumToSpecies(nationalNum); + switch (species) { + case SPECIES_UNOWN: + personality = gSaveBlock2.pokedex.unownPersonality; + break; + + case SPECIES_SPINDA: + personality = gSaveBlock2.pokedex.spindaPersonality; + break; + + default: + personality = 0; + break; + } + + LoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].x, + gMonFrontPicCoords[species].y, + 0x2000000, + gUnknown_0840B5A0[arg3], + species, + personality, + 1 + ); + + palette = species_and_otid_get_pal(species, 0, 0xFFFF); + LoadCompressedPalette(palette, 0x100 + (arg3 * 16), 0x20); + sub_8143648(arg3, arg3); + + spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + gSprites[spriteId].oam.paletteNum = arg3; + gSprites[spriteId].oam.priority = 1; + gSprites[spriteId].data1 = arg3 + 1; + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].callback = spritecb_81454E0; + + spriteId2 = CreateSprite(&gSpriteTemplate_840CAEC, gSprites[spriteId].pos1.x, gSprites[spriteId].pos1.y, 1); + gSprites[spriteId2].data0 = spriteId; + + StartSpriteAnimIfDifferent(&gSprites[spriteId2], arg3); + + return spriteId; +} +#else +__attribute__((naked)) +u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3) { + 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, 0x14\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r10, r1\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + str r2, [sp, 0x10]\n\ + lsls r3, 16\n\ + lsrs r3, 16\n\ + mov r9, r3\n\ + adds r0, r6, 0\n\ + bl NationalPokedexNumToSpecies\n\ + adds r6, r0, 0\n\ + cmp r6, 0xC9\n\ + beq _081456F8\n\ + movs r0, 0x9A\n\ + lsls r0, 1\n\ + cmp r6, r0\n\ + beq _081456EE\n\ + movs r7, 0\n\ + b _081456FC\n\ +_081456EE:\n\ + ldr r0, _081456F4 @ =gSaveBlock2\n\ + ldr r7, [r0, 0x20]\n\ + b _081456FC\n\ + .align 2, 0\n\ +_081456F4: .4byte gSaveBlock2\n\ +_081456F8:\n\ + ldr r0, _081457E8 @ =gSaveBlock2\n\ + ldr r7, [r0, 0x1C]\n\ +_081456FC:\n\ + lsls r0, r6, 3\n\ + ldr r1, _081457EC @ =gMonFrontPicTable\n\ + adds r0, r1\n\ + ldr r1, _081457F0 @ =gMonFrontPicCoords\n\ + lsls r2, r6, 2\n\ + adds r2, r1\n\ + ldrb r1, [r2]\n\ + ldrb r2, [r2, 0x1]\n\ + movs r3, 0x80\n\ + lsls r3, 18\n\ + ldr r4, _081457F4 @ =gUnknown_0840B5A0\n\ + mov r8, r4\n\ + mov r5, r9\n\ + lsls r4, r5, 2\n\ + add r4, r8\n\ + ldr r4, [r4]\n\ + str r4, [sp]\n\ + str r6, [sp, 0x4]\n\ + str r7, [sp, 0x8]\n\ + movs r4, 0x1\n\ + str r4, [sp, 0xC]\n\ + bl LoadSpecialPokePic\n\ + ldr r2, _081457F8 @ =0x0000ffff\n\ + adds r0, r6, 0\n\ + movs r1, 0\n\ + bl species_and_otid_get_pal\n\ + lsls r5, 4\n\ + mov r8, r5\n\ + movs r1, 0x80\n\ + lsls r1, 1\n\ + add r1, r8\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + movs r2, 0x20\n\ + bl LoadCompressedPalette\n\ + mov r7, r9\n\ + lsls r6, r7, 24\n\ + lsrs r6, 24\n\ + mov r0, r9\n\ + adds r1, r6, 0\n\ + bl sub_8143648\n\ + ldr r0, _081457FC @ =gUnknown_02024E8C\n\ + mov r2, r10\n\ + lsls r1, r2, 16\n\ + asrs r1, 16\n\ + ldr r3, [sp, 0x10]\n\ + lsls r2, r3, 16\n\ + asrs r2, 16\n\ + movs r3, 0\n\ + bl CreateSprite\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + ldr r5, _08145800 @ =gSprites\n\ + lsls r2, r4, 4\n\ + adds r2, r4\n\ + lsls r2, 2\n\ + adds r3, r2, r5\n\ + ldrb r1, [r3, 0x5]\n\ + movs r0, 0xF\n\ + ands r0, r1\n\ + mov r7, r8\n\ + orrs r0, r7\n\ + movs r1, 0xD\n\ + negs r1, r1\n\ + ands r0, r1\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + strb r0, [r3, 0x5]\n\ + mov r0, r9\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0x30]\n\ + movs r0, 0x3E\n\ + adds r0, r3\n\ + mov r8, r0\n\ + ldrb r0, [r0]\n\ + orrs r0, r1\n\ + mov r1, r8\n\ + strb r0, [r1]\n\ + adds r0, r5, 0\n\ + adds r0, 0x1C\n\ + adds r2, r0\n\ + ldr r0, _08145804 @ =spritecb_81454E0\n\ + str r0, [r2]\n\ + ldr r0, _08145808 @ =gSpriteTemplate_840CAEC\n\ + movs r2, 0x20\n\ + ldrsh r1, [r3, r2]\n\ + movs r7, 0x22\n\ + ldrsh r2, [r3, r7]\n\ + movs r3, 0x1\n\ + bl CreateSprite\n\ + adds r1, r0, 0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + strh r4, [r0, 0x2E]\n\ + adds r1, r6, 0\n\ + bl StartSpriteAnimIfDifferent\n\ + adds r0, r4, 0\n\ + add sp, 0x14\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_081457E8: .4byte gSaveBlock2\n\ +_081457EC: .4byte gMonFrontPicTable\n\ +_081457F0: .4byte gMonFrontPicCoords\n\ +_081457F4: .4byte gUnknown_0840B5A0\n\ +_081457F8: .4byte 0x0000ffff\n\ +_081457FC: .4byte gUnknown_02024E8C\n\ +_08145800: .4byte gSprites\n\ +_08145804: .4byte spritecb_81454E0\n\ +_08145808: .4byte gSpriteTemplate_840CAEC\n\ + .syntax divided\n"); +} +#endif + +void spritecb_814580C(struct Sprite *sprite) { + if (gSprites[sprite->data0].data0 == 10 || gUnknown_0203935C) + { + DestroySprite(sprite); + return; + } + + sprite->invisible = gSprites[sprite->data0].invisible; + sprite->oam.objMode = gSprites[sprite->data0].oam.objMode; + sprite->oam.affineMode = gSprites[sprite->data0].oam.affineMode; + sprite->oam.matrixNum = gSprites[sprite->data0].oam.matrixNum; + sprite->pos1.x = gSprites[sprite->data0].pos1.x; + sprite->pos1.y = gSprites[sprite->data0].pos1.y; +} + +__attribute__((naked)) +void sub_81458DC(void) { + 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, 0x4\n\ + ldr r7, _0814597C @ =0x0201c000\n\ + ldr r0, _08145980 @ =0x00004023\n\ + bl VarGet\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + bl GetStarterPokemon\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + bl SpeciesToNationalPokedexNum\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r10, r0\n\ + movs r4, 0x1\n\ + movs r5, 0\n\ + ldr r0, _08145984 @ =0x00000181\n\ + mov r8, r0\n\ +_0814590E:\n\ + adds r0, r4, 0\n\ + movs r1, 0x1\n\ + bl sub_8090D90\n\ + lsls r0, 24\n\ + adds r6, r7, 0\n\ + adds r6, 0x90\n\ + cmp r0, 0\n\ + beq _0814592C\n\ + lsls r0, r5, 1\n\ + adds r0, r6, r0\n\ + strh r4, [r0]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ +_0814592C:\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + cmp r4, r8\n\ + bls _0814590E\n\ + adds r4, r5, 0\n\ + ldr r0, _08145984 @ =0x00000181\n\ + lsls r1, r4, 16\n\ + mov r9, r1\n\ + movs r2, 0x8E\n\ + adds r2, r7\n\ + mov r8, r2\n\ + adds r1, r7, 0\n\ + adds r1, 0x86\n\ + str r1, [sp]\n\ + cmp r4, r0\n\ + bhi _08145964\n\ + adds r1, r6, 0\n\ + movs r3, 0\n\ + adds r2, r0, 0\n\ +_08145954:\n\ + lsls r0, r4, 1\n\ + adds r0, r1, r0\n\ + strh r3, [r0]\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + cmp r4, r2\n\ + bls _08145954\n\ +_08145964:\n\ + movs r2, 0xE5\n\ + lsls r2, 2\n\ + adds r0, r7, r2\n\ + strh r5, [r0]\n\ + mov r1, r9\n\ + lsrs r0, r1, 16\n\ + cmp r0, 0x43\n\ + bhi _08145988\n\ + mov r2, r8\n\ + strh r5, [r2]\n\ + b _0814598E\n\ + .align 2, 0\n\ +_0814597C: .4byte 0x0201c000\n\ +_08145980: .4byte 0x00004023\n\ +_08145984: .4byte 0x00000181\n\ +_08145988:\n\ + movs r0, 0x44\n\ + mov r1, r8\n\ + strh r0, [r1]\n\ +_0814598E:\n\ + movs r5, 0\n\ + movs r2, 0xE5\n\ + lsls r2, 2\n\ + adds r4, r7, r2\n\ + mov r9, r5\n\ + b _0814599E\n\ +_0814599A:\n\ + cmp r5, 0x43\n\ + bhi _081459EE\n\ +_0814599E:\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + ldrh r1, [r4]\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + lsls r1, r5, 1\n\ + adds r1, r7, r1\n\ + lsls r0, r2, 1\n\ + adds r3, r6, r0\n\ + ldrh r0, [r3]\n\ + strh r0, [r1]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + mov r0, r9\n\ + strh r0, [r3]\n\ + ldrh r0, [r4]\n\ + subs r0, 0x1\n\ + strh r0, [r4]\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r2, r0\n\ + beq _081459E8\n\ + ldrh r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r6, r0\n\ + ldrh r0, [r0]\n\ + strh r0, [r3]\n\ + ldrh r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r6, r0\n\ + mov r1, r9\n\ + strh r1, [r0]\n\ +_081459E8:\n\ + ldrh r0, [r4]\n\ + cmp r0, 0\n\ + bne _0814599A\n\ +_081459EE:\n\ + mov r2, r8\n\ + ldrh r0, [r2]\n\ + cmp r0, 0x43\n\ + bhi _08145A26\n\ + adds r5, r0, 0\n\ + movs r2, 0\n\ + cmp r5, 0x43\n\ + bhi _08145A5C\n\ + mov r3, r8\n\ +_08145A00:\n\ + lsls r1, r5, 1\n\ + adds r1, r7, r1\n\ + lsls r0, r2, 1\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + ldrh r0, [r3]\n\ + cmp r2, r0\n\ + bne _08145A1A\n\ + movs r2, 0\n\ +_08145A1A:\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0x43\n\ + bls _08145A00\n\ + b _08145A5C\n\ +_08145A26:\n\ + movs r4, 0\n\ + ldrh r0, [r7]\n\ + cmp r0, r10\n\ + beq _08145A42\n\ +_08145A2E:\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + lsls r0, r4, 1\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + cmp r0, r10\n\ + beq _08145A42\n\ + cmp r4, 0x43\n\ + bls _08145A2E\n\ +_08145A42:\n\ + mov r1, r8\n\ + ldrh r0, [r1]\n\ + subs r0, 0x1\n\ + cmp r4, r0\n\ + bge _08145A5C\n\ + lsls r0, r4, 1\n\ + adds r0, r7, r0\n\ + ldr r2, [sp]\n\ + ldrh r1, [r2]\n\ + strh r1, [r0]\n\ + mov r0, r10\n\ + strh r0, [r2]\n\ + b _08145A62\n\ +_08145A5C:\n\ + mov r2, r10\n\ + ldr r1, [sp]\n\ + strh r2, [r1]\n\ +_08145A62:\n\ + movs r0, 0x44\n\ + mov r1, r8\n\ + strh r0, [r1]\n\ + add sp, 0x4\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"); +} |