diff options
author | camthesaxman <cameronghall@cox.net> | 2016-11-03 19:32:25 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2016-11-03 19:32:25 -0500 |
commit | 3186b8ddaf35beb72b5aee070d35288950b6cffc (patch) | |
tree | c782f0d82b5d37a6a934f5ac17da93e8db4a9716 | |
parent | 22dbe5c0bfdec51df0f5238562d45d0e0d000393 (diff) |
decompile decompress.c
-rw-r--r-- | asm/decompress.s | 287 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/decompress.c | 118 |
3 files changed, 119 insertions, 288 deletions
diff --git a/asm/decompress.s b/asm/decompress.s deleted file mode 100644 index 0f80acaab..000000000 --- a/asm/decompress.s +++ /dev/null @@ -1,287 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .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. diff --git a/ld_script.txt b/ld_script.txt index d53500236..7f4c7cccd 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -47,7 +47,7 @@ SECTIONS { src/rtc.o(.text); src/main_menu.o(.text); asm/rom3.o(.text); - asm/decompress.o(.text); + src/decompress.o(.text); asm/rom_800D42C.o(.text); src/pokemon_1.o(.text); asm/calculate_base_damage.o(.text); diff --git a/src/decompress.c b/src/decompress.c new file mode 100644 index 000000000..44cd3c2c0 --- /dev/null +++ b/src/decompress.c @@ -0,0 +1,118 @@ +#include "global.h" +#include "species.h" +#include "sprite.h" + +#define WRAM 0x02000000 + +extern struct SpriteSheet gMonFrontPicTable[]; +extern struct SpriteSheet gMonBackPicTable[]; +extern void *gUnknown_081FAF4C[]; + +extern void LZ77UnCompVram(const void *src, void *dest); +extern void LZ77UnCompWram(const void *src, void *dest); +extern void DrawSpindaSpots(u16, u32, void *, u8); + +void sub_800D378(struct SpriteSheet *a, u32 b, u32 c, u32 d, void *e, s32 f, u32 g, u32 h); + +void sub_800D238(const void *src, void *dest) +{ + LZ77UnCompWram(src, dest); +} + +void LZDecompressVram(const void *src, void *dest) +{ + LZ77UnCompVram(src, dest); +} + +void LoadCompressedObjectPic(struct SpriteSheet *a) +{ + struct SpriteSheet spriteSheet; + + LZ77UnCompWram(a->data, (void *)WRAM); + spriteSheet.data = (void *)WRAM; + spriteSheet.size = a->size; + spriteSheet.tag = a->tag; + LoadSpriteSheet(&spriteSheet); +} + +void LoadCompressedObjectPicOverrideBuffer(struct SpriteSheet *a, void *buffer) +{ + struct SpriteSheet spriteSheet; + + LZ77UnCompWram(a->data, buffer); + spriteSheet.data = buffer; + spriteSheet.size = a->size; + spriteSheet.tag = a->tag; + LoadSpriteSheet(&spriteSheet); +} + +void LoadCompressedObjectPalette(struct SpritePalette *a) +{ + struct SpritePalette spritePalette; + + LZ77UnCompWram(a->data, (void *)WRAM); + spritePalette.data = (void *)WRAM; + spritePalette.tag = a->tag; + LoadSpritePalette(&spritePalette); +} + +void LoadCompressedObjectPaletteOverrideBuffer(struct SpritePalette *a, void *buffer) +{ + struct SpritePalette spritePalette; + + LZ77UnCompWram(a->data, buffer); + spritePalette.data = buffer; + spritePalette.tag = a->tag; + LoadSpritePalette(&spritePalette); +} + +void DecompressPicFromTable_2(const struct SpriteSheet *a, u8 b, u8 c, void *d, void *e, s32 f) +{ + if (f > 412) + LZ77UnCompWram(gMonFrontPicTable[0].data, e); + else + LZ77UnCompWram(a->data, e); +} + +void sub_800D334(struct SpriteSheet *a, u32 b, u32 c, u32 d, void *dest, s32 f, u32 g) +{ + u32 unk; + + if (dest == gUnknown_081FAF4C[0] || dest == gUnknown_081FAF4C[2]) + unk = 0; + else + unk = 1; + sub_800D378(a, b, c, d, dest, f, g, unk); +} + +void sub_800D378(struct SpriteSheet *a, u32 b, u32 c, u32 d, void *dest, s32 f, u32 g, u32 h) +{ + u8 r7 = h; + + if (f == SPECIES_UNOWN) + { + u16 r1 = (((g & 0x3000000) >> 18) | ((g & 0x30000) >> 12) | ((g & 0x300) >> 6) | (g & 3)) % 0x1C; + + if (r1 == 0) + r1 = SPECIES_UNOWN; + else + r1 += 412; + if (r7 == 0) + LZ77UnCompWram(gMonBackPicTable[r1].data, dest); + else + LZ77UnCompWram(gMonFrontPicTable[r1].data, dest); + } + else + { + if (f > 412) + LZ77UnCompWram(gMonFrontPicTable[0].data, dest); + else + LZ77UnCompWram(a->data, dest); + } + DrawSpindaSpots(f, g, dest, r7); +} + +static void Unused_LZDecompressWramIndirect(const void **src, void *dest) +{ + LZ77UnCompWram(*src, dest); +} |