.include "asm/macros.inc" .include "constants/constants.inc" .syntax unified .text thumb_func_start FreeSpriteTilesByTag @ void FreeSpriteTilesByTag(u16 tag) FreeSpriteTilesByTag: @ 8008568 push {r4-r7,lr} mov r7, r8 push {r7} lsls r0, 16 lsrs r0, 16 bl IndexOfObjectTilesTag lsls r0, 24 lsrs r4, r0, 24 cmp r4, 0xFF beq _080085C6 ldr r0, =gUnknown_03000A70 lsls r1, r4, 2 adds r2, r1, r0 adds r0, 0x2 adds r1, r0 ldrh r0, [r1] ldrh r3, [r2] adds r0, r3, r0 ldr r1, =gUnknown_030009F0 mov r8, r1 lsls r5, r4, 1 cmp r3, r0 bge _080085BE ldr r1, =gSpriteTileAllocBitmap mov r12, r1 movs r6, 0x7 movs r7, 0x1 adds r4, r0, 0 _080085A2: lsrs r2, r3, 3 add r2, r12 adds r0, r3, 0 ands r0, r6 adds r1, r7, 0 lsls r1, r0 ldrb r0, [r2] bics r0, r1 strb r0, [r2] adds r0, r3, 0x1 lsls r0, 16 lsrs r3, r0, 16 cmp r3, r4 blt _080085A2 _080085BE: mov r0, r8 adds r1, r5, r0 ldr r0, =0x0000ffff strh r0, [r1] _080085C6: pop {r3} mov r8, r3 pop {r4-r7} pop {r0} bx r0 .pool thumb_func_end FreeSpriteTilesByTag thumb_func_start FreeSpriteTileRanges @ void FreeSpriteTileRanges() FreeSpriteTileRanges: @ 80085E0 push {r4-r7,lr} movs r2, 0 ldr r7, =gUnknown_030009F0 ldr r0, =0x0000ffff adds r6, r0, 0 ldr r4, =gUnknown_03000A70 movs r3, 0 adds r5, r4, 0x2 _080085F0: lsls r1, r2, 1 adds r1, r7 ldrh r0, [r1] orrs r0, r6 strh r0, [r1] lsls r1, r2, 2 adds r0, r1, r4 strh r3, [r0] adds r1, r5 strh r3, [r1] adds r0, r2, 0x1 lsls r0, 24 lsrs r2, r0, 24 cmp r2, 0x3F bls _080085F0 pop {r4-r7} pop {r0} bx r0 .pool thumb_func_end FreeSpriteTileRanges thumb_func_start GetSpriteTileStartByTag @ u16 GetSpriteTileStartByTag(u16 tag) GetSpriteTileStartByTag: @ 8008620 push {lr} lsls r0, 16 lsrs r0, 16 bl IndexOfObjectTilesTag lsls r0, 24 lsrs r1, r0, 24 cmp r1, 0xFF beq _08008640 ldr r0, =gUnknown_03000A70 lsls r1, 2 adds r1, r0 ldrh r0, [r1] b _08008642 .pool _08008640: ldr r0, =0x0000ffff _08008642: pop {r1} bx r1 .pool thumb_func_end GetSpriteTileStartByTag thumb_func_start IndexOfObjectTilesTag @ u8 IndexOfObjectTilesTag(u16 tag) IndexOfObjectTilesTag: @ 800864C push {lr} lsls r0, 16 lsrs r2, r0, 16 movs r1, 0 ldr r3, =gUnknown_030009F0 _08008656: lsls r0, r1, 1 adds r0, r3 ldrh r0, [r0] cmp r0, r2 bne _08008668 adds r0, r1, 0 b _08008674 .pool _08008668: adds r0, r1, 0x1 lsls r0, 24 lsrs r1, r0, 24 cmp r1, 0x3F bls _08008656 movs r0, 0xFF _08008674: pop {r1} bx r1 thumb_func_end IndexOfObjectTilesTag thumb_func_start GetTagByObjectTileRangeStart @ u16 GetTagByObjectTileRangeStart(u16 rangeStart) GetTagByObjectTileRangeStart: @ 8008678 push {r4-r6,lr} lsls r0, 16 lsrs r3, r0, 16 movs r2, 0 ldr r6, =gUnknown_030009F0 ldr r5, =0x0000ffff ldr r4, =gUnknown_03000A70 _08008686: lsls r0, r2, 1 adds r1, r0, r6 ldrh r0, [r1] cmp r0, r5 beq _080086AC lsls r0, r2, 2 adds r0, r4 ldrh r0, [r0] cmp r0, r3 bne _080086AC ldrh r0, [r1] b _080086B8 .pool _080086AC: adds r0, r2, 0x1 lsls r0, 24 lsrs r2, r0, 24 cmp r2, 0x3F bls _08008686 ldr r0, =0x0000ffff _080086B8: pop {r4-r6} pop {r1} bx r1 .pool thumb_func_end GetTagByObjectTileRangeStart thumb_func_start AllocSpriteTileRange @ void AllocSpriteTileRange(u16 tag, u16 start, u16 count) AllocSpriteTileRange: @ 80086C4 push {r4-r6,lr} adds r4, r0, 0 adds r5, r1, 0 adds r6, r2, 0 lsls r4, 16 lsrs r4, 16 lsls r5, 16 lsrs r5, 16 lsls r6, 16 lsrs r6, 16 ldr r0, =0x0000ffff bl IndexOfObjectTilesTag lsls r0, 24 lsrs r0, 24 ldr r2, =gUnknown_030009F0 lsls r1, r0, 1 adds r1, r2 strh r4, [r1] ldr r1, =gUnknown_03000A70 lsls r0, 2 adds r2, r0, r1 strh r5, [r2] adds r1, 0x2 adds r0, r1 strh r6, [r0] pop {r4-r6} pop {r0} bx r0 .pool thumb_func_end AllocSpriteTileRange thumb_func_start ResetObjectPaletteAllocator @ void ResetObjectPaletteAllocator() ResetObjectPaletteAllocator: @ 800870C push {r4,lr} ldr r1, =gUnknown_0300301C movs r0, 0 strb r0, [r1] movs r2, 0 ldr r4, =gUnknown_03000CF0 ldr r0, =0x0000ffff adds r3, r0, 0 _0800871C: lsls r0, r2, 1 adds r0, r4 ldrh r1, [r0] orrs r1, r3 strh r1, [r0] adds r0, r2, 0x1 lsls r0, 24 lsrs r2, r0, 24 cmp r2, 0xF bls _0800871C pop {r4} pop {r0} bx r0 .pool thumb_func_end ResetObjectPaletteAllocator thumb_func_start LoadTaggedObjectPalette @ u8 LoadTaggedObjectPalette(struct TaggedObjectPalette *palette) LoadTaggedObjectPalette: @ 8008744 push {r4,r5,lr} adds r5, r0, 0 ldrh r0, [r5, 0x4] bl IndexOfSpritePaletteTag lsls r0, 24 lsrs r4, r0, 24 cmp r4, 0xFF beq _0800875A adds r0, r4, 0 b _0800878A _0800875A: ldr r0, =0x0000ffff bl IndexOfSpritePaletteTag lsls r0, 24 lsrs r4, r0, 24 cmp r4, 0xFF beq _08008788 ldr r1, =gUnknown_03000CF0 lsls r0, r4, 1 adds r0, r1 ldrh r1, [r5, 0x4] strh r1, [r0] ldr r0, [r5] lsls r1, r4, 4 bl LoadObjectPalette adds r0, r4, 0 b _0800878A .pool _08008788: movs r0, 0xFF _0800878A: pop {r4,r5} pop {r1} bx r1 thumb_func_end LoadTaggedObjectPalette thumb_func_start LoadTaggedObjectPalettes @ void LoadTaggedObjectPalettes(struct TaggedObjectPalette *palettes) LoadTaggedObjectPalettes: @ 8008790 push {r4,r5,lr} adds r5, r0, 0 movs r4, 0 b _0800879E _08008798: adds r0, r4, 0x1 lsls r0, 24 lsrs r4, r0, 24 _0800879E: lsls r0, r4, 3 adds r1, r0, r5 ldr r0, [r1] cmp r0, 0 beq _080087B6 adds r0, r1, 0 bl LoadTaggedObjectPalette lsls r0, 24 lsrs r0, 24 cmp r0, 0xFF bne _08008798 _080087B6: pop {r4,r5} pop {r0} bx r0 thumb_func_end LoadTaggedObjectPalettes thumb_func_start LoadObjectPalette @ void LoadObjectPalette(void *src, u16 destOffset) LoadObjectPalette: @ 80087BC push {lr} lsls r1, 16 movs r2, 0x80 lsls r2, 17 adds r1, r2 lsrs r1, 16 movs r2, 0x20 bl LoadPalette pop {r0} bx r0 thumb_func_end LoadObjectPalette thumb_func_start AllocObjectPalette @ u8 AllocObjectPalette(u16 tag) AllocObjectPalette: @ 80087D4 push {r4,lr} lsls r0, 16 lsrs r4, r0, 16 ldr r0, =0x0000ffff bl IndexOfSpritePaletteTag lsls r0, 24 lsrs r2, r0, 24 cmp r2, 0xFF beq _080087FC ldr r1, =gUnknown_03000CF0 lsls r0, r2, 1 adds r0, r1 strh r4, [r0] adds r0, r2, 0 b _080087FE .pool _080087FC: movs r0, 0xFF _080087FE: pop {r4} pop {r1} bx r1 thumb_func_end AllocObjectPalette thumb_func_start IndexOfSpritePaletteTag @ u8 IndexOfSpritePaletteTag(u16 tag) IndexOfSpritePaletteTag: @ 8008804 push {lr} lsls r0, 16 lsrs r2, r0, 16 ldr r0, =gUnknown_0300301C ldrb r1, [r0] cmp r1, 0xF bhi _08008836 ldr r3, =gUnknown_03000CF0 _08008814: lsls r0, r1, 1 adds r0, r3 ldrh r0, [r0] cmp r0, r2 bne _0800882C adds r0, r1, 0 b _08008838 .pool _0800882C: adds r0, r1, 0x1 lsls r0, 24 lsrs r1, r0, 24 cmp r1, 0xF bls _08008814 _08008836: movs r0, 0xFF _08008838: pop {r1} bx r1 thumb_func_end IndexOfSpritePaletteTag thumb_func_start GetObjectPaletteTagBySlot @ u16 GetObjectPaletteTagBySlot(u8 paletteSlot) GetObjectPaletteTagBySlot: @ 800883C lsls r0, 24 ldr r1, =gUnknown_03000CF0 lsrs r0, 23 adds r0, r1 ldrh r0, [r0] bx lr .pool thumb_func_end GetObjectPaletteTagBySlot thumb_func_start FreeSpritePaletteByTag @ void FreeSpritePaletteByTag(int tag) FreeSpritePaletteByTag: @ 800884C push {lr} lsls r0, 16 lsrs r0, 16 bl IndexOfSpritePaletteTag lsls r0, 24 lsrs r1, r0, 24 cmp r1, 0xFF beq _08008868 ldr r0, =gUnknown_03000CF0 lsls r1, 1 adds r1, r0 ldr r0, =0x0000ffff strh r0, [r1] _08008868: pop {r0} bx r0 .pool thumb_func_end FreeSpritePaletteByTag thumb_func_start SetSpriteOamTables_NoPriorityFromTable @ void SetSpriteOamTables_NoPriorityFromTable(struct obj *object, u32 spriteOamTables) SetSpriteOamTables_NoPriorityFromTable: @ 8008874 str r1, [r0, 0x18] adds r0, 0x42 movs r1, 0x40 strb r1, [r0] bx lr thumb_func_end SetSpriteOamTables_NoPriorityFromTable thumb_func_start AddSpriteToOamBuffer @ u8 AddSpriteToOamBuffer(struct obj *obj, u8 *spriteIndex) AddSpriteToOamBuffer: @ 8008880 push {r4,lr} adds r4, r0, 0 adds r3, r1, 0 ldr r1, =gOamLimit ldrb r0, [r3] ldrb r1, [r1] cmp r0, r1 bcc _08008898 movs r0, 0x1 b _080088E0 .pool _08008898: ldr r0, [r4, 0x18] cmp r0, 0 beq _080088AC adds r0, r4, 0 adds r0, 0x42 ldrb r1, [r0] movs r0, 0xC0 ands r0, r1 cmp r0, 0 bne _080088CC _080088AC: ldr r0, =gMain ldrb r2, [r3] lsls r2, 3 adds r0, 0x38 adds r2, r0 ldr r0, [r4] ldr r1, [r4, 0x4] str r0, [r2] str r1, [r2, 0x4] ldrb r0, [r3] adds r0, 0x1 strb r0, [r3] movs r0, 0 b _080088E0 .pool _080088CC: ldrb r1, [r3] lsls r1, 3 ldr r0, =gUnknown_030022F8 adds r1, r0 adds r0, r4, 0 adds r2, r3, 0 bl AddSubspritesToOamBuffer lsls r0, 24 lsrs r0, 24 _080088E0: pop {r4} pop {r1} bx r1 .pool thumb_func_end AddSpriteToOamBuffer thumb_func_start AddSubspritesToOamBuffer @ u8 AddSubspritesToOamBuffer(struct obj *object, struct sprite *sprite, u8 *spriteIndex) AddSubspritesToOamBuffer: @ 80088EC push {r4-r7,lr} mov r7, r10 mov r6, r9 mov r5, r8 push {r5-r7} sub sp, 0x1C adds r3, r0, 0 str r1, [sp] mov r8, r2 ldr r0, =gOamLimit ldrb r1, [r2] ldrb r0, [r0] cmp r1, r0 bcc _08008910 _08008908: movs r0, 0x1 b _08008AE6 .pool _08008910: adds r0, r3, 0 adds r0, 0x42 ldrb r1, [r0] lsls r1, 26 lsrs r1, 23 ldr r2, [r3, 0x18] adds r7, r2, r1 mov r12, r3 str r0, [sp, 0x18] cmp r7, 0 beq _0800892C ldr r0, [r7, 0x4] cmp r0, 0 bne _08008942 _0800892C: mov r2, r12 ldr r0, [r2] ldr r1, [r2, 0x4] ldr r2, [sp] str r0, [r2] str r1, [r2, 0x4] mov r1, r8 ldrb r0, [r1] adds r0, 0x1 strb r0, [r1] b _08008AE4 _08008942: mov r2, r12 ldrh r0, [r2, 0x4] lsls r0, 22 lsrs r0, 22 str r0, [sp, 0x4] ldrb r0, [r7] str r0, [sp, 0xC] ldrb r0, [r2, 0x3] lsls r0, 26 lsrs r0, 27 asrs r1, r0, 3 str r1, [sp, 0x10] movs r1, 0x1 ldr r2, [sp, 0x10] ands r2, r1 str r2, [sp, 0x10] asrs r0, 4 mov r10, r0 ands r0, r1 mov r10, r0 mov r1, r12 ldrh r0, [r1, 0x2] lsls r0, 23 lsrs r0, 23 adds r1, 0x28 ldrb r1, [r1] lsls r1, 24 asrs r1, 24 subs r0, r1 lsls r0, 16 lsrs r2, r0, 16 mov r1, r12 ldrb r0, [r1] adds r1, 0x29 ldrb r1, [r1] lsls r1, 24 asrs r1, 24 subs r0, r1 lsls r0, 16 lsrs r0, 16 str r0, [sp, 0x8] movs r0, 0 mov r9, r0 ldr r1, [sp, 0xC] cmp r9, r1 bcc _080089A0 b _08008AE4 _080089A0: lsls r0, r2, 16 asrs r0, 16 str r0, [sp, 0x14] _080089A6: mov r2, r8 ldrb r0, [r2] ldr r1, =gOamLimit ldrb r1, [r1] cmp r0, r1 bcs _08008908 ldr r0, [r7, 0x4] mov r2, r9 lsls r6, r2, 2 adds r2, r6, r0 movs r0, 0 ldrsb r0, [r2, r0] lsls r0, 16 lsrs r4, r0, 16 movs r0, 0x1 ldrsb r0, [r2, r0] lsls r0, 16 lsrs r5, r0, 16 ldr r0, [sp, 0x10] cmp r0, 0 beq _080089FC ldr r0, [r2] lsls r1, r0, 12 lsrs r1, 30 lsls r1, 2 lsls r0, 14 lsrs r0, 30 lsls r0, 4 adds r1, r0 ldr r0, =gUnknown_082EC754 adds r1, r0 ldrb r1, [r1] lsls r1, 24 asrs r1, 24 lsls r0, r4, 16 asrs r0, 16 adds r0, r1 lsls r0, 16 lsrs r4, r0, 16 mvns r0, r4 adds r0, 0x1 lsls r0, 16 lsrs r4, r0, 16 _080089FC: mov r1, r10 cmp r1, 0 beq _08008A2E ldr r0, [r2] lsls r1, r0, 12 lsrs r1, 30 lsls r1, 2 lsls r0, 14 lsrs r0, 30 lsls r0, 4 adds r1, r0 ldr r2, =gUnknown_082EC754 adds r1, r2 ldrb r1, [r1, 0x1] lsls r1, 24 asrs r1, 24 lsls r0, r5, 16 asrs r0, 16 adds r0, r1 lsls r0, 16 lsrs r5, r0, 16 mvns r0, r5 adds r0, 0x1 lsls r0, 16 lsrs r5, r0, 16 _08008A2E: mov r1, r9 lsls r0, r1, 3 ldr r2, [sp] adds r3, r0, r2 mov r2, r12 ldr r0, [r2] ldr r1, [r2, 0x4] str r0, [r3] str r1, [r3, 0x4] ldr r0, [r7, 0x4] adds r0, r6, r0 ldr r1, [r0] lsls r1, 14 lsrs r1, 30 lsls r1, 6 ldrb r2, [r3, 0x1] movs r0, 0x3F ands r0, r2 orrs r0, r1 strb r0, [r3, 0x1] ldr r0, [r7, 0x4] adds r0, r6, r0 ldr r1, [r0] lsls r1, 12 lsrs r1, 30 lsls r1, 6 ldrb r2, [r3, 0x3] movs r0, 0x3F ands r0, r2 orrs r0, r1 strb r0, [r3, 0x3] lsls r1, r4, 16 asrs r1, 16 ldr r0, [sp, 0x14] adds r1, r0, r1 ldr r2, =0x000001ff adds r0, r2, 0 ands r1, r0 ldrh r2, [r3, 0x2] ldr r0, =0xfffffe00 ands r0, r2 orrs r0, r1 strh r0, [r3, 0x2] ldr r1, [sp, 0x8] adds r0, r1, r5 strb r0, [r3] ldr r0, [r7, 0x4] adds r0, r6, r0 ldr r1, [r0] lsls r1, 2 lsrs r1, 22 ldr r2, [sp, 0x4] adds r1, r2, r1 ldr r2, =0x000003ff adds r0, r2, 0 ands r1, r0 ldrh r2, [r3, 0x4] ldr r0, =0xfffffc00 ands r0, r2 orrs r0, r1 strh r0, [r3, 0x4] ldr r0, [sp, 0x18] ldrb r1, [r0] movs r0, 0xC0 ands r0, r1 cmp r0, 0x80 beq _08008ACA ldr r0, [r7, 0x4] adds r0, r6, r0 ldr r1, [r0] lsrs r1, 30 lsls r1, 2 ldrb r2, [r3, 0x5] movs r0, 0xD negs r0, r0 ands r0, r2 orrs r0, r1 strb r0, [r3, 0x5] _08008ACA: mov r0, r9 adds r0, 0x1 lsls r0, 24 lsrs r0, 24 mov r9, r0 mov r1, r8 ldrb r0, [r1] adds r0, 0x1 strb r0, [r1] ldr r2, [sp, 0xC] cmp r9, r2 bcs _08008AE4 b _080089A6 _08008AE4: movs r0, 0 _08008AE6: add sp, 0x1C pop {r3-r5} mov r8, r3 mov r9, r4 mov r10, r5 pop {r4-r7} pop {r1} bx r1 .pool thumb_func_end AddSubspritesToOamBuffer .align 2, 0 @ Don't pad with nop.