diff options
Diffstat (limited to 'asm/decompress.s')
-rw-r--r-- | asm/decompress.s | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/asm/decompress.s b/asm/decompress.s new file mode 100644 index 000000000..32349001f --- /dev/null +++ b/asm/decompress.s @@ -0,0 +1,287 @@ + .include "constants/gba_constants.s" + .include "constants/species_constants.s" + .include "asm/macros.s" + + .syntax unified + + .text + + thumb_func_start sub_800D238 +sub_800D238: @ 800D238 + push {lr} + bl LZ77UnCompWram + pop {r0} + bx r0 + thumb_func_end sub_800D238 + + thumb_func_start LZDecompressVram +LZDecompressVram: @ 800D244 + push {lr} + bl LZ77UnCompVram + pop {r0} + bx r0 + thumb_func_end LZDecompressVram + + thumb_func_start LoadCompressedObjectPic +LoadCompressedObjectPic: @ 800D250 + push {r4,r5,lr} + sub sp, 0x8 + adds r4, r0, 0 + ldr r0, [r4] + movs r5, 0x80 + lsls r5, 18 + adds r1, r5, 0 + bl LZ77UnCompWram + str r5, [sp] + ldrh r1, [r4, 0x6] + lsls r1, 16 + ldrh r0, [r4, 0x4] + orrs r0, r1 + str r0, [sp, 0x4] + mov r0, sp + bl LoadSpriteSheet + add sp, 0x8 + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end LoadCompressedObjectPic + + thumb_func_start LoadCompressedObjectPicOverrideBuffer +LoadCompressedObjectPicOverrideBuffer: @ 800D27C + push {r4,r5,lr} + sub sp, 0x8 + adds r4, r0, 0 + adds r5, r1, 0 + ldr r0, [r4] + bl LZ77UnCompWram + str r5, [sp] + ldrh r1, [r4, 0x6] + lsls r1, 16 + ldrh r0, [r4, 0x4] + orrs r0, r1 + str r0, [sp, 0x4] + mov r0, sp + bl LoadSpriteSheet + add sp, 0x8 + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end LoadCompressedObjectPicOverrideBuffer + + thumb_func_start LoadCompressedObjectPalette +LoadCompressedObjectPalette: @ 800D2A4 + push {r4,r5,lr} + sub sp, 0x8 + adds r5, r0, 0 + ldr r0, [r5] + movs r4, 0x80 + lsls r4, 18 + adds r1, r4, 0 + bl LZ77UnCompWram + str r4, [sp] + ldrh r2, [r5, 0x4] + ldr r1, _0800D2D4 @ =0xffff0000 + ldr r0, [sp, 0x4] + ands r0, r1 + orrs r0, r2 + str r0, [sp, 0x4] + mov r0, sp + bl LoadSpritePalette + add sp, 0x8 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_0800D2D4: .4byte 0xffff0000 + thumb_func_end LoadCompressedObjectPalette + + thumb_func_start LoadCompressedObjectPaletteOverrideBuffer +LoadCompressedObjectPaletteOverrideBuffer: @ 800D2D8 + push {r4,r5,lr} + sub sp, 0x8 + adds r5, r0, 0 + adds r4, r1, 0 + ldr r0, [r5] + bl LZ77UnCompWram + str r4, [sp] + ldrh r2, [r5, 0x4] + ldr r1, _0800D304 @ =0xffff0000 + ldr r0, [sp, 0x4] + ands r0, r1 + orrs r0, r2 + str r0, [sp, 0x4] + mov r0, sp + bl LoadSpritePalette + add sp, 0x8 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_0800D304: .4byte 0xffff0000 + thumb_func_end LoadCompressedObjectPaletteOverrideBuffer + + thumb_func_start DecompressPicFromTable_2 +DecompressPicFromTable_2: @ 800D308 + push {lr} + adds r2, r0, 0 + ldr r3, [sp, 0x4] + ldr r1, [sp, 0x8] + movs r0, 0xCE + lsls r0, 1 + cmp r1, r0 + ble _0800D328 + ldr r0, _0800D324 @ =gMonFrontPicTable + ldr r0, [r0] + adds r1, r3, 0 + bl LZ77UnCompWram + b _0800D330 + .align 2, 0 +_0800D324: .4byte gMonFrontPicTable +_0800D328: + ldr r0, [r2] + adds r1, r3, 0 + bl LZ77UnCompWram +_0800D330: + pop {r0} + bx r0 + thumb_func_end DecompressPicFromTable_2 + + thumb_func_start sub_800D334 +sub_800D334: @ 800D334 + push {r4-r6,lr} + sub sp, 0x10 + adds r4, r0, 0 + adds r5, r1, 0 + adds r6, r2, 0 + ldr r2, [sp, 0x20] + ldr r1, _0800D354 @ =gUnknown_081FAF4C + ldr r0, [r1] + cmp r2, r0 + beq _0800D34E + ldr r0, [r1, 0x8] + cmp r2, r0 + bne _0800D358 +_0800D34E: + movs r1, 0 + b _0800D35A + .align 2, 0 +_0800D354: .4byte gUnknown_081FAF4C +_0800D358: + movs r1, 0x1 +_0800D35A: + str r2, [sp] + ldr r0, [sp, 0x24] + str r0, [sp, 0x4] + ldr r0, [sp, 0x28] + str r0, [sp, 0x8] + str r1, [sp, 0xC] + adds r0, r4, 0 + adds r1, r5, 0 + adds r2, r6, 0 + bl sub_800D378 + add sp, 0x10 + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end sub_800D334 + + thumb_func_start sub_800D378 +sub_800D378: @ 800D378 + push {r4-r7,lr} + adds r1, r0, 0 + ldr r5, [sp, 0x14] + ldr r6, [sp, 0x18] + ldr r4, [sp, 0x1C] + ldr r0, [sp, 0x20] + lsls r0, 24 + lsrs r7, r0, 24 + cmp r6, SPECIES_UNOWN + bne _0800D3EC + movs r0, 0xC0 + lsls r0, 18 + ands r0, r4 + lsrs r0, 18 + movs r1, 0xC0 + lsls r1, 10 + ands r1, r4 + lsrs r1, 12 + orrs r0, r1 + movs r1, 0xC0 + lsls r1, 2 + ands r1, r4 + lsrs r1, 6 + orrs r0, r1 + movs r1, 0x3 + ands r1, r4 + orrs r0, r1 + movs r1, 0x1C + bl __umodsi3 + lsls r0, 16 + lsrs r1, r0, 16 + cmp r1, 0 + bne _0800D3C0 + movs r1, SPECIES_UNOWN + b _0800D3CA +_0800D3C0: + movs r2, 0xCE + lsls r2, 1 + adds r0, r1, r2 + lsls r0, 16 + lsrs r1, r0, 16 +_0800D3CA: + cmp r7, 0 + bne _0800D3DC + ldr r0, _0800D3D8 @ =gMonBackPicTable + lsls r1, 3 + adds r1, r0 + ldr r0, [r1] + b _0800D3F8 + .align 2, 0 +_0800D3D8: .4byte gMonBackPicTable +_0800D3DC: + ldr r0, _0800D3E8 @ =gMonFrontPicTable + lsls r1, 3 + adds r1, r0 + ldr r0, [r1] + b _0800D3F8 + .align 2, 0 +_0800D3E8: .4byte gMonFrontPicTable +_0800D3EC: + movs r0, 0xCE + lsls r0, 1 + cmp r6, r0 + ble _0800D404 + ldr r0, _0800D400 @ =gMonFrontPicTable + ldr r0, [r0] +_0800D3F8: + adds r1, r5, 0 + bl LZ77UnCompWram + b _0800D40C + .align 2, 0 +_0800D400: .4byte gMonFrontPicTable +_0800D404: + ldr r0, [r1] + adds r1, r5, 0 + bl LZ77UnCompWram +_0800D40C: + lsls r0, r6, 16 + lsrs r0, 16 + adds r1, r4, 0 + adds r2, r5, 0 + adds r3, r7, 0 + bl DrawSpindaSpots + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_800D378 + + thumb_func_start Unused_LZDecompressWramIndirect +Unused_LZDecompressWramIndirect: @ 800D420 + push {lr} + ldr r0, [r0] + bl LZ77UnCompWram + pop {r0} + bx r0 + thumb_func_end Unused_LZDecompressWramIndirect + + .align 2, 0 @ Don't pad with nop. |