diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2017-09-02 19:55:39 +0200 |
---|---|---|
committer | DizzyEggg <jajkodizzy@wp.pl> | 2017-09-02 19:55:39 +0200 |
commit | 7a831c215eabd589b2bdd0263b8c9ce069af6fe0 (patch) | |
tree | 4f8ff3635cc556501d525a5504c805dffb39685d | |
parent | 7ecdcc5ed89f7643f3845fea6ac668acbd1353d4 (diff) |
decompile decompress.s
-rw-r--r-- | asm/battle_7.s | 10 | ||||
-rw-r--r-- | asm/contest.s | 4 | ||||
-rw-r--r-- | asm/contest_link_80F57C4.s | 4 | ||||
-rw-r--r-- | asm/contest_painting.s | 4 | ||||
-rw-r--r-- | asm/decompress.s | 1019 | ||||
-rw-r--r-- | asm/egg_hatch.s | 2 | ||||
-rw-r--r-- | asm/link.s | 2 | ||||
-rw-r--r-- | asm/pokeblock_feed.s | 2 | ||||
-rw-r--r-- | asm/rom_80A5C6C.s | 6 | ||||
-rw-r--r-- | asm/rom_80C6FA0.s | 2 | ||||
-rw-r--r-- | asm/rom_8184DA4.s | 4 | ||||
-rw-r--r-- | asm/rom_81BAD84.s | 12 | ||||
-rw-r--r-- | asm/script_pokemon_util_80F87D8.s | 4 | ||||
-rw-r--r-- | asm/trade.s | 8 | ||||
-rw-r--r-- | include/decompress.h | 17 | ||||
-rw-r--r-- | ld_script.txt | 7 | ||||
-rw-r--r-- | src/decompress.c | 597 | ||||
-rw-r--r-- | src/malloc.c | 4 | ||||
-rw-r--r-- | sym_ewram.txt | 3 |
19 files changed, 654 insertions, 1057 deletions
diff --git a/asm/battle_7.s b/asm/battle_7.s index 5f8656664..967816c74 100644 --- a/asm/battle_7.s +++ b/asm/battle_7.s @@ -1380,7 +1380,7 @@ _0805DC58: adds r0, r2, 0 adds r2, r5, 0 adds r3, r6, 0 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys mov r3, r8 lsls r2, r3, 4 movs r0, 0x80 @@ -1551,7 +1551,7 @@ _0805DE00: ldr r1, [r1] adds r2, r5, 0 adds r3, r4, 0 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys b _0805DE46 .pool _0805DE2C: @@ -1566,7 +1566,7 @@ _0805DE2C: ldr r1, [r1] adds r2, r5, 0 adds r3, r4, 0 - bl DecompressMonPic_DetectFrontOrBack + bl HandleLoadSpecialPokePic _0805DE46: mov r2, r8 lsls r1, r2, 4 @@ -2447,7 +2447,7 @@ _0805E59C: ldr r3, [r2] _0805E5FA: mov r2, r8 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys b _0805E662 .pool _0805E618: @@ -2484,7 +2484,7 @@ _0805E618: adds r2, r3 ldr r3, [r2] mov r2, r8 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys _0805E662: ldr r0, =gUnknown_020244D4 ldr r0, [r0] diff --git a/asm/contest.s b/asm/contest.s index 4fffaf316..0701a4799 100644 --- a/asm/contest.s +++ b/asm/contest.s @@ -6746,7 +6746,7 @@ sub_80DB174: @ 80DB174 ldr r1, [r1, 0x4] adds r2, r5, 0 adds r3, r6, 0 - bl DecompressMonPic_DetectFrontOrBack_2 + bl HandleLoadSpecialPokePic_2 b _080DB1CC .pool _080DB1B8: @@ -6758,7 +6758,7 @@ _080DB1B8: ldr r1, [r1, 0x4] adds r2, r5, 0 adds r3, r6, 0 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys _080DB1CC: adds r0, r5, 0 adds r1, r7, 0 diff --git a/asm/contest_link_80F57C4.s b/asm/contest_link_80F57C4.s index c8040485d..929b3b1c9 100644 --- a/asm/contest_link_80F57C4.s +++ b/asm/contest_link_80F57C4.s @@ -1399,7 +1399,7 @@ _080F648C: ldr r1, [r1, 0x8] adds r2, r6, 0 adds r3, r4, 0 - bl DecompressMonPic_DetectFrontOrBack_2 + bl HandleLoadSpecialPokePic_2 b _080F64F2 .pool _080F64E0: @@ -1410,7 +1410,7 @@ _080F64E0: ldr r1, [r1, 0x8] adds r2, r6, 0 adds r3, r4, 0 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys _080F64F2: adds r0, r6, 0 adds r1, r5, 0 diff --git a/asm/contest_painting.s b/asm/contest_painting.s index 8498ad9db..156e46050 100644 --- a/asm/contest_painting.s +++ b/asm/contest_painting.s @@ -587,7 +587,7 @@ sub_81302E8: @ 81302E8 ldr r2, [r6] ldr r3, [r2] adds r2, r5, 0 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys ldr r0, [r4] ldr r0, [r0, 0x8] ldr r1, [r7] @@ -606,7 +606,7 @@ _08130348: ldr r2, [r6] ldr r3, [r2] adds r2, r5, 0 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys ldr r0, [r4] ldr r0, [r0, 0x4] ldr r1, [r7] diff --git a/asm/decompress.s b/asm/decompress.s deleted file mode 100644 index c5630325f..000000000 --- a/asm/decompress.s +++ /dev/null @@ -1,1019 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start LZDecompressWram -@ void LZDecompressWram(void *src, void *dest) -LZDecompressWram: @ 8034518 - push {lr} - bl LZ77UnCompWram - pop {r0} - bx r0 - thumb_func_end LZDecompressWram - - thumb_func_start LZDecompressVram -@ void LZDecompressVram(void *src, void *dest) -LZDecompressVram: @ 8034524 - push {lr} - bl LZ77UnCompVram - pop {r0} - bx r0 - thumb_func_end LZDecompressVram - - thumb_func_start LoadCompressedObjectPic -@ u16 LoadCompressedObjectPic(struct obj_tiles *pic) -LoadCompressedObjectPic: @ 8034530 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r0, [r4] - ldr r5, =0x0201c000 - 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 - lsls r0, 16 - lsrs r0, 16 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end LoadCompressedObjectPic - - thumb_func_start LoadCompressedObjectPicOverrideBuffer -@ void LoadCompressedObjectPicOverrideBuffer(struct obj_tiles *pic, void *tempBuffer) -LoadCompressedObjectPicOverrideBuffer: @ 8034564 - 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 -@ void LoadCompressedObjectPalette(struct TaggedObjectPalette *palette) -LoadCompressedObjectPalette: @ 803458C - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - ldr r0, [r5] - ldr r4, =0x0201c000 - adds r1, r4, 0 - bl LZ77UnCompWram - str r4, [sp] - ldrh r2, [r5, 0x4] - ldr r1, =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 - .pool - thumb_func_end LoadCompressedObjectPalette - - thumb_func_start LoadCompressedObjectPaletteOverrideBuffer -@ void LoadCompressedObjectPaletteOverrideBuffer(struct TaggedObjectPalette *palette, void *tempBuffer) -LoadCompressedObjectPaletteOverrideBuffer: @ 80345C0 - 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, =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 - .pool - thumb_func_end LoadCompressedObjectPaletteOverrideBuffer - - thumb_func_start DecompressPicFromTable -@ void DecompressPicFromTable(void **picTable, void *dest, u32 index) -DecompressPicFromTable: @ 80345F0 - push {r4,r5,lr} - adds r3, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r5, r0 - ble _08034610 - ldr r0, =gMonFrontPicTable - ldr r0, [r0] - bl LZ77UnCompWram - b _08034618 - .pool -_08034610: - ldr r0, [r3] - adds r1, r4, 0 - bl LZ77UnCompWram -_08034618: - adds r0, r4, 0 - adds r1, r5, 0 - bl DuplicateDeoxysTiles - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end DecompressPicFromTable - - thumb_func_start DecompressMonPic_DetectFrontOrBack -@ void DecompressMonPic_DetectFrontOrBack(void **picTable, void *dest, u32 speciesId, u32 personality) -DecompressMonPic_DetectFrontOrBack: @ 8034628 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r0, r2, 3 - ldr r1, =gMonFrontPicTable - adds r0, r1 - movs r1, 0 - cmp r4, r0 - bne _0803463E - movs r1, 0x1 -_0803463E: - str r1, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - bl DecompressMonPic_2 - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end DecompressMonPic_DetectFrontOrBack - - thumb_func_start DecompressMonPic -@ void DecompressMonPic(void **picTable, void *dest, u32 speciesId, u32 personality, bool8 isFrontPic) -DecompressMonPic: @ 8034654 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r4, r1, 0 - adds r7, r2, 0 - adds r5, r3, 0 - ldr r0, [sp, 0x18] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r7, 0xC9 - bne _080346D0 - movs r0, 0xC0 - lsls r0, 18 - ands r0, r5 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r5 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r5 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r5 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _080346A2 - movs r1, 0xC9 - b _080346AC -_080346A2: - movs r2, 0xCE - lsls r2, 1 - adds r0, r1, r2 - lsls r0, 16 - lsrs r1, r0, 16 -_080346AC: - mov r0, r8 - cmp r0, 0 - bne _080346C0 - ldr r0, =gMonBackPicTable - lsls r1, 3 - adds r1, r0 - ldr r0, [r1] - b _080346DC - .pool -_080346C0: - ldr r0, =gMonFrontPicTable - lsls r1, 3 - adds r1, r0 - ldr r0, [r1] - b _080346DC - .pool -_080346D0: - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - ble _080346E8 - ldr r0, =gMonFrontPicTable - ldr r0, [r0] -_080346DC: - adds r1, r4, 0 - bl LZ77UnCompWram - b _080346F0 - .pool -_080346E8: - ldr r0, [r6] - adds r1, r4, 0 - bl LZ77UnCompWram -_080346F0: - adds r0, r4, 0 - adds r1, r7, 0 - bl DuplicateDeoxysTiles - lsls r0, r7, 16 - lsrs r0, 16 - adds r1, r5, 0 - adds r2, r4, 0 - mov r3, r8 - bl DrawSpindaSpots - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end DecompressMonPic - - thumb_func_start Unused_LZDecompressWramIndirect -@ void Unused_LZDecompressWramIndirect(void **src) -Unused_LZDecompressWramIndirect: @ 8034710 - push {lr} - ldr r0, [r0] - bl LZ77UnCompWram - pop {r0} - bx r0 - thumb_func_end Unused_LZDecompressWramIndirect - - thumb_func_start sub_803471C -sub_803471C: @ 803471C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - mov r9, r0 - str r1, [sp] - str r2, [sp, 0x4] - adds r5, r3, 0 - movs r0, 0x1 - mov r1, r9 - ands r0, r1 - cmp r0, 0 - bne _0803473C - b _080348D4 -_0803473C: - asrs r0, r1, 1 - adds r0, 0x4 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x8] - movs r0, 0 - ldr r2, [sp] - cmp r0, r2 - blt _08034750 - b _08034964 -_08034750: - movs r4, 0x8 - subs r1, r4, r1 - str r1, [sp, 0x10] -_08034756: - movs r7, 0 - adds r0, 0x1 - str r0, [sp, 0x14] - ldr r0, [sp, 0x10] - cmp r7, r0 - bge _080347D2 - ldr r1, [sp, 0x8] - lsls r1, 8 - str r1, [sp, 0x18] - movs r2, 0 - mov r10, r2 - mov r0, r9 - movs r4, 0x8 - subs r0, r4, r0 - str r0, [sp, 0xC] -_08034774: - movs r3, 0 - asrs r0, r7, 1 - adds r1, r7, 0 - movs r2, 0x1 - ands r1, r2 - str r1, [sp, 0x20] - lsls r0, 8 - mov r8, r0 - mov r12, r5 -_08034786: - lsls r1, r3, 5 - ldr r4, [sp, 0x18] - adds r0, r5, r4 - adds r0, r1 - mov r1, r8 - adds r2, r0, r1 - mov r1, r12 - add r1, r8 - movs r6, 0xF -_08034798: - ldr r4, [sp, 0x20] - cmp r4, 0 - bne _080347A8 - strb r4, [r1] - add r4, sp, 0x20 - ldrb r4, [r4] - strb r4, [r2, 0x10] - b _080347B6 -_080347A8: - mov r0, r10 - strb r0, [r1, 0x10] - movs r4, 0x80 - lsls r4, 1 - adds r4, r2, r4 - str r4, [sp, 0x1C] - strb r0, [r4] -_080347B6: - adds r2, 0x1 - adds r1, 0x1 - subs r6, 0x1 - cmp r6, 0 - bge _08034798 - movs r0, 0x20 - add r12, r0 - adds r3, 0x1 - cmp r3, 0x7 - ble _08034786 - adds r7, 0x1 - ldr r1, [sp, 0xC] - cmp r7, r1 - blt _08034774 -_080347D2: - movs r7, 0 - movs r2, 0 -_080347D6: - movs r6, 0 - adds r4, r7, 0x1 - mov r8, r4 - lsls r4, r7, 5 -_080347DE: - adds r0, r6, 0x1 - mov r10, r0 - lsls r1, r6, 8 - adds r0, r1, 0 - adds r0, 0xC0 - adds r0, r5, r0 - adds r0, r4 - adds r1, r5, r1 - adds r1, r4 - movs r3, 0x1F -_080347F2: - strb r2, [r1] - strb r2, [r0] - adds r0, 0x1 - adds r1, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _080347F2 - mov r6, r10 - cmp r6, 0x7 - ble _080347DE - mov r7, r8 - cmp r7, 0x1 - ble _080347D6 - mov r1, r9 - cmp r1, 0x5 - bne _08034818 - movs r2, 0x90 - lsls r2, 1 - adds r5, r2 -_08034818: - movs r7, 0 - cmp r7, r9 - bge _080348AE -_0803481E: - movs r3, 0 - adds r7, 0x1 - mov r8, r7 - cmp r3, r9 - bge _0803488E -_08034828: - adds r3, 0x1 - mov r10, r3 - ldr r4, [sp, 0x4] - adds r4, 0x20 - adds r7, r5, 0 - adds r7, 0x20 - movs r0, 0x12 - adds r0, r5 - mov r12, r0 - ldr r2, [sp, 0x4] - adds r3, r5, 0 - movs r6, 0x3 -_08034840: - ldrb r0, [r2] - mov r1, r12 - strb r0, [r1] - ldrb r0, [r2, 0x1] - strb r0, [r1, 0x1] - ldrb r0, [r2, 0x2] - strb r0, [r1, 0x1E] - ldrb r0, [r2, 0x3] - strb r0, [r1, 0x1F] - movs r0, 0x81 - lsls r0, 1 - adds r1, r3, r0 - ldrb r0, [r2, 0x10] - strb r0, [r1] - ldr r0, =0x00000103 - adds r1, r3, r0 - ldrb r0, [r2, 0x11] - strb r0, [r1] - movs r0, 0x90 - lsls r0, 1 - adds r1, r3, r0 - ldrb r0, [r2, 0x12] - strb r0, [r1] - ldr r0, =0x00000121 - adds r1, r3, r0 - ldrb r0, [r2, 0x13] - strb r0, [r1] - movs r1, 0x4 - add r12, r1 - adds r2, 0x4 - adds r3, 0x4 - subs r6, 0x1 - cmp r6, 0 - bge _08034840 - str r4, [sp, 0x4] - adds r5, r7, 0 - mov r3, r10 - cmp r3, r9 - blt _08034828 -_0803488E: - mov r2, r9 - cmp r2, 0x7 - bne _080348A0 - adds r5, 0x20 - b _080348A8 - .pool -_080348A0: - mov r4, r9 - cmp r4, 0x5 - bne _080348A8 - adds r5, 0x60 -_080348A8: - mov r7, r8 - cmp r7, r9 - blt _0803481E -_080348AE: - mov r0, r9 - cmp r0, 0x7 - bne _080348BC - movs r1, 0x80 - lsls r1, 1 - adds r5, r1 - b _080348C8 -_080348BC: - mov r2, r9 - cmp r2, 0x5 - bne _080348C8 - movs r4, 0xF0 - lsls r4, 1 - adds r5, r4 -_080348C8: - ldr r0, [sp, 0x14] - ldr r1, [sp] - cmp r0, r1 - bge _080348D2 - b _08034756 -_080348D2: - b _08034964 -_080348D4: - movs r6, 0 - ldr r2, [sp] - cmp r6, r2 - bge _08034964 -_080348DC: - adds r6, 0x1 - mov r10, r6 - mov r4, r9 - cmp r4, 0x6 - bne _080348F4 - movs r0, 0 - movs r3, 0xFF -_080348EA: - strb r0, [r5] - adds r5, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _080348EA -_080348F4: - movs r7, 0 - cmp r7, r9 - bge _08034948 -_080348FA: - adds r7, 0x1 - mov r8, r7 - mov r1, r9 - lsls r0, r1, 5 - cmp r1, 0x6 - bne _08034914 - movs r1, 0 - movs r3, 0x1F -_0803490A: - strb r1, [r5] - adds r5, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _0803490A -_08034914: - adds r1, r0, 0 - cmp r1, 0 - ble _0803492E - adds r3, r1, 0 -_0803491C: - ldr r2, [sp, 0x4] - ldrb r0, [r2] - strb r0, [r5] - adds r2, 0x1 - str r2, [sp, 0x4] - adds r5, 0x1 - subs r3, 0x1 - cmp r3, 0 - bne _0803491C -_0803492E: - mov r4, r9 - cmp r4, 0x6 - bne _08034942 - movs r0, 0 - movs r3, 0x1F -_08034938: - strb r0, [r5] - adds r5, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _08034938 -_08034942: - mov r7, r8 - cmp r7, r9 - blt _080348FA -_08034948: - mov r0, r9 - cmp r0, 0x6 - bne _0803495C - movs r0, 0 - movs r3, 0xFF -_08034952: - strb r0, [r5] - adds r5, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _08034952 -_0803495C: - mov r6, r10 - ldr r1, [sp] - cmp r6, r1 - blt _080348DC -_08034964: - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_803471C - - thumb_func_start sub_8034974 -sub_8034974: @ 8034974 - adds r2, r0, 0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - ldrb r1, [r2, 0x2] - lsls r1, 8 - orrs r0, r1 - ldrb r1, [r2, 0x1] - orrs r0, r1 - bx lr - thumb_func_end sub_8034974 - - thumb_func_start LoadCompressedObjectPicUsingHeap -@ u32 LoadCompressedObjectPicUsingHeap(struct obj_tiles *pic) -LoadCompressedObjectPicUsingHeap: @ 8034988 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r0, [r4] - ldr r0, [r0] - lsrs r0, 8 - bl AllocZeroed - adds r5, r0, 0 - ldr r0, [r4] - 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 - adds r0, r5, 0 - bl Free - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end LoadCompressedObjectPicUsingHeap - - thumb_func_start LoadCompressedObjectPaletteUsingHeap -@ u32 LoadCompressedObjectPaletteUsingHeap(struct TaggedObjectPalette *palette) -LoadCompressedObjectPaletteUsingHeap: @ 80349C4 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r0, [r4] - ldr r0, [r0] - lsrs r0, 8 - bl AllocZeroed - adds r5, r0, 0 - ldr r0, [r4] - adds r1, r5, 0 - bl LZ77UnCompWram - str r5, [sp] - ldrh r2, [r4, 0x4] - ldr r1, =0xffff0000 - ldr r0, [sp, 0x4] - ands r0, r1 - orrs r0, r2 - str r0, [sp, 0x4] - mov r0, sp - bl LoadSpritePalette - adds r0, r5, 0 - bl Free - movs r0, 0 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end LoadCompressedObjectPaletteUsingHeap - - thumb_func_start DecompressPicFromTable_2 -@ void DecompressPicFromTable_2(void **picTable, void *dest, u32 index) -DecompressPicFromTable_2: @ 8034A08 - push {r4,r5,lr} - adds r3, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r5, r0 - ble _08034A28 - ldr r0, =gMonFrontPicTable - ldr r0, [r0] - bl LZ77UnCompWram - b _08034A30 - .pool -_08034A28: - ldr r0, [r3] - adds r1, r4, 0 - bl LZ77UnCompWram -_08034A30: - adds r0, r4, 0 - adds r1, r5, 0 - bl DuplicateDeoxysTiles - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end DecompressPicFromTable_2 - - thumb_func_start DecompressMonPic_2 -@ void DecompressMonPic_2(void **picTable, void *dest, u32 speciesId, u32 personality, bool8 isFrontPic) -DecompressMonPic_2: @ 8034A40 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r4, r1, 0 - adds r7, r2, 0 - adds r5, r3, 0 - ldr r0, [sp, 0x18] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r7, 0xC9 - bne _08034ABC - movs r0, 0xC0 - lsls r0, 18 - ands r0, r5 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r5 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r5 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r5 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _08034A8E - movs r1, 0xC9 - b _08034A98 -_08034A8E: - movs r2, 0xCE - lsls r2, 1 - adds r0, r1, r2 - lsls r0, 16 - lsrs r1, r0, 16 -_08034A98: - mov r0, r8 - cmp r0, 0 - bne _08034AAC - ldr r0, =gMonBackPicTable - lsls r1, 3 - adds r1, r0 - ldr r0, [r1] - b _08034AC8 - .pool -_08034AAC: - ldr r0, =gMonFrontPicTable - lsls r1, 3 - adds r1, r0 - ldr r0, [r1] - b _08034AC8 - .pool -_08034ABC: - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - ble _08034AD4 - ldr r0, =gMonFrontPicTable - ldr r0, [r0] -_08034AC8: - adds r1, r4, 0 - bl LZ77UnCompWram - b _08034ADC - .pool -_08034AD4: - ldr r0, [r6] - adds r1, r4, 0 - bl LZ77UnCompWram -_08034ADC: - adds r0, r4, 0 - adds r1, r7, 0 - bl DuplicateDeoxysTiles - lsls r0, r7, 16 - lsrs r0, 16 - adds r1, r5, 0 - adds r2, r4, 0 - mov r3, r8 - bl DrawSpindaSpots - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end DecompressMonPic_2 - - thumb_func_start DecompressMonPic_DetectFrontOrBack_2 -@ void DecompressMonPic_DetectFrontOrBack_2(void **picTable, void *dest, u32 speciesId, u32 personality) -DecompressMonPic_DetectFrontOrBack_2: @ 8034AFC - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r0, r2, 3 - ldr r1, =gMonFrontPicTable - adds r0, r1 - movs r1, 0 - cmp r4, r0 - bne _08034B12 - movs r1, 0x1 -_08034B12: - str r1, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - bl DecompressMonPic_2 - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end DecompressMonPic_DetectFrontOrBack_2 - - thumb_func_start sub_8034B28 -sub_8034B28: @ 8034B28 - push {lr} - adds r3, r0, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r2, r0 - ble _08034B44 - ldr r0, =gMonFrontPicTable - ldr r0, [r0] - bl LZ77UnCompWram - b _08034B4A - .pool -_08034B44: - ldr r0, [r3] - bl LZ77UnCompWram -_08034B4A: - pop {r0} - bx r0 - thumb_func_end sub_8034B28 - - thumb_func_start DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack -@ void DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack(void **picTable, void *dest, u32 speciesId, u32 personality) -DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack: @ 8034B50 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r0, r2, 3 - ldr r1, =gMonFrontPicTable - adds r0, r1 - movs r1, 0 - cmp r4, r0 - bne _08034B66 - movs r1, 0x1 -_08034B66: - str r1, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack - - thumb_func_start DecompressMonPicWithoutDuplicatingDeoxysTiles -@ void DecompressMonPicWithoutDuplicatingDeoxysTiles(void **picTable, void *dest, u32 speciesId, u32 personality, bool8 isFrontPic) -DecompressMonPicWithoutDuplicatingDeoxysTiles: @ 8034B7C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r5, r1, 0 - adds r7, r2, 0 - adds r4, r3, 0 - ldr r0, [sp, 0x18] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r7, 0xC9 - bne _08034BF8 - 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 _08034BCA - movs r1, 0xC9 - b _08034BD4 -_08034BCA: - movs r2, 0xCE - lsls r2, 1 - adds r0, r1, r2 - lsls r0, 16 - lsrs r1, r0, 16 -_08034BD4: - mov r0, r8 - cmp r0, 0 - bne _08034BE8 - ldr r0, =gMonBackPicTable - lsls r1, 3 - adds r1, r0 - ldr r0, [r1] - b _08034C04 - .pool -_08034BE8: - ldr r0, =gMonFrontPicTable - lsls r1, 3 - adds r1, r0 - ldr r0, [r1] - b _08034C04 - .pool -_08034BF8: - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - ble _08034C10 - ldr r0, =gMonFrontPicTable - ldr r0, [r0] -_08034C04: - adds r1, r5, 0 - bl LZ77UnCompWram - b _08034C18 - .pool -_08034C10: - ldr r0, [r6] - adds r1, r5, 0 - bl LZ77UnCompWram -_08034C18: - lsls r0, r7, 16 - lsrs r0, 16 - adds r1, r4, 0 - adds r2, r5, 0 - mov r3, r8 - bl DrawSpindaSpots - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end DecompressMonPicWithoutDuplicatingDeoxysTiles - - thumb_func_start DuplicateDeoxysTiles -@ void DuplicateDeoxysTiles(void *pointer, u32 speciesId) -DuplicateDeoxysTiles: @ 8034C30 - push {lr} - adds r3, r0, 0 - movs r0, 0xCD - lsls r0, 1 - cmp r1, r0 - bne _08034C4A - movs r1, 0x80 - lsls r1, 4 - adds r0, r3, r1 - ldr r2, =0x04000200 - adds r1, r3, 0 - bl CpuSet -_08034C4A: - pop {r0} - bx r0 - .pool - thumb_func_end DuplicateDeoxysTiles - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/egg_hatch.s b/asm/egg_hatch.s index 322b20c9d..9c4d75c3e 100644 --- a/asm/egg_hatch.s +++ b/asm/egg_hatch.s @@ -409,7 +409,7 @@ _08071688: adds r2, r1 ldr r1, [r2] adds r2, r4, 0 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys adds r0, r5, 0 bl sub_806E794 bl LoadCompressedObjectPalette diff --git a/asm/link.s b/asm/link.s index d43b048d2..d8825240f 100644 --- a/asm/link.s +++ b/asm/link.s @@ -68989,7 +68989,7 @@ _0802CA32: adds r0, r1 ldr r3, [r7, 0x8] mov r1, r8 - bl DecompressMonPic_DetectFrontOrBack + bl HandleLoadSpecialPokePic mov r3, r8 str r3, [sp, 0x18] adds r4, r6, 0 diff --git a/asm/pokeblock_feed.s b/asm/pokeblock_feed.s index c2225dcde..8f63be452 100644 --- a/asm/pokeblock_feed.s +++ b/asm/pokeblock_feed.s @@ -327,7 +327,7 @@ _08179E48: ldr r1, [r1, 0x8] adds r2, r5, 0 adds r3, r4, 0 - bl DecompressMonPic_DetectFrontOrBack_2 + bl HandleLoadSpecialPokePic_2 ldr r0, =gUnknown_0203BD18 ldr r1, [r0] b _08179F5E diff --git a/asm/rom_80A5C6C.s b/asm/rom_80A5C6C.s index 10cdfa068..260635e52 100644 --- a/asm/rom_80A5C6C.s +++ b/asm/rom_80A5C6C.s @@ -5236,7 +5236,7 @@ _080A8488: str r2, [sp] adds r2, r6, 0 mov r3, r8 - bl DecompressMonPic_2 + bl LoadSpecialPokePic_2 b _080A8540 .pool _080A84B0: @@ -5287,7 +5287,7 @@ _080A850A: str r2, [sp] adds r2, r6, 0 mov r3, r8 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles + bl LoadSpecialPokePic_DontHandleDeoxys b _080A8540 .pool _080A8524: @@ -5303,7 +5303,7 @@ _080A8524: str r2, [sp] adds r2, r6, 0 mov r3, r8 - bl DecompressMonPic_2 + bl LoadSpecialPokePic_2 _080A8540: ldr r5, =gUnknown_020244D4 ldr r0, [r5] diff --git a/asm/rom_80C6FA0.s b/asm/rom_80C6FA0.s index 502b1f33c..0890622f4 100644 --- a/asm/rom_80C6FA0.s +++ b/asm/rom_80C6FA0.s @@ -6038,7 +6038,7 @@ sub_80CA44C: @ 80CA44C movs r2, 0x1 str r2, [sp] adds r2, r4, 0 - bl DecompressMonPic + bl LoadSpecialPokePic ldr r1, [r6] ldr r2, =0x00000cdc adds r0, r1, r2 diff --git a/asm/rom_8184DA4.s b/asm/rom_8184DA4.s index e881eb24e..5ed8dadc2 100644 --- a/asm/rom_8184DA4.s +++ b/asm/rom_8184DA4.s @@ -14912,7 +14912,7 @@ _0818D03C: adds r1, r5, 0 adds r2, r4, 0 adds r3, r6, 0 - bl DecompressMonPic + bl LoadSpecialPokePic b _0818D08E .pool _0818D050: @@ -14924,7 +14924,7 @@ _0818D054: adds r1, r5, 0 adds r2, r4, 0 adds r3, r6, 0 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles + bl LoadSpecialPokePic_DontHandleDeoxys b _0818D08E .pool _0818D068: diff --git a/asm/rom_81BAD84.s b/asm/rom_81BAD84.s index f57840d13..b54e0bc35 100644 --- a/asm/rom_81BAD84.s +++ b/asm/rom_81BAD84.s @@ -17398,7 +17398,7 @@ _081C46A6: _081C46B0: ldr r1, [r1, 0x8] ldr r3, [r5, 0xC] - bl DecompressMonPic_DetectFrontOrBack_2 + bl HandleLoadSpecialPokePic_2 b _081C4768 .pool _081C46CC: @@ -17409,7 +17409,7 @@ _081C46CC: ldr r1, [r3, 0x8] _081C46D6: ldr r3, [r5, 0xC] - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys b _081C4768 .pool _081C46E4: @@ -17439,7 +17439,7 @@ _081C4700: ldrh r2, [r5, 0x2] ldr r3, [r5, 0xC] adds r0, r4, 0 - bl DecompressMonPic_DetectFrontOrBack_2 + bl HandleLoadSpecialPokePic_2 b _081C4768 .pool _081C472C: @@ -17454,7 +17454,7 @@ _081C472C: ldrh r2, [r5, 0x2] ldr r3, [r5, 0xC] adds r0, r4, 0 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys b _081C4768 .pool _081C4750: @@ -35972,7 +35972,7 @@ _081CDBD0: str r2, [sp] adds r2, r4, 0 adds r3, r5, 0 - bl DecompressMonPic + bl LoadSpecialPokePic adds r0, r4, 0 mov r1, r8 adds r2, r5, 0 @@ -46848,7 +46848,7 @@ _081D30C4: mov r1, r8 adds r2, r4, 0 adds r3, r5, 0 - bl DecompressMonPic + bl LoadSpecialPokePic adds r0, r4, 0 adds r1, r6, 0 adds r2, r5, 0 diff --git a/asm/script_pokemon_util_80F87D8.s b/asm/script_pokemon_util_80F87D8.s index 6134aebe7..d96287da5 100644 --- a/asm/script_pokemon_util_80F87D8.s +++ b/asm/script_pokemon_util_80F87D8.s @@ -715,7 +715,7 @@ _080F8D44: ldr r1, [r1, 0x8] adds r2, r6, 0 adds r3, r5, 0 - bl DecompressMonPic_DetectFrontOrBack_2 + bl HandleLoadSpecialPokePic_2 b _080F8DD8 .pool _080F8DC4: @@ -727,7 +727,7 @@ _080F8DC4: ldr r1, [r1, 0x8] adds r2, r6, 0 adds r3, r5, 0 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys _080F8DD8: adds r0, r6, 0 mov r1, r8 diff --git a/asm/trade.s b/asm/trade.s index 3a8e22d08..ef42f25b8 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -7133,7 +7133,7 @@ _0807AD58: ldr r1, [r1, 0x8] adds r2, r5, 0 adds r3, r7, 0 - bl DecompressMonPic_DetectFrontOrBack_2 + bl HandleLoadSpecialPokePic_2 movs r4, 0 b _0807ADB2 .pool @@ -7151,7 +7151,7 @@ _0807AD94: ldr r1, [r2] adds r2, r5, 0 adds r3, r7, 0 - bl DecompressMonPicWithoutDuplicatingDeoxysTiles_DetectFrontOrBack + bl HandleLoadSpecialPokePic_DontHandleDeoxys _0807ADB2: mov r0, r8 bl sub_806E794 @@ -10373,7 +10373,7 @@ _0807CCEE: ldr r1, [r1] ldr r1, [r1, 0x10] ldr r3, [r3, 0x6C] - bl DecompressMonPic_DetectFrontOrBack_2 + bl HandleLoadSpecialPokePic_2 ldr r1, [r7] b _0807CF4C .pool @@ -12478,7 +12478,7 @@ _0807E13A: ldr r1, [r1] ldr r1, [r1, 0x10] ldr r3, [r3, 0x6C] - bl DecompressMonPic_DetectFrontOrBack_2 + bl HandleLoadSpecialPokePic_2 ldr r1, [r7] b _0807E398 .pool diff --git a/include/decompress.h b/include/decompress.h new file mode 100644 index 000000000..407866667 --- /dev/null +++ b/include/decompress.h @@ -0,0 +1,17 @@ +#ifndef GUARD_DECOMPRESS_H +#define GUARD_DECOMPRESS_H + +#include "sprite.h" + +void LZDecompressWram(const void *src, void *dest); +void LZDecompressVram(const void *src, void *dest); +u16 LoadCompressedObjectPic(const struct CompressedSpriteSheet *src); +void LoadCompressedObjectPicOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer); +void LoadCompressedObjectPalette(const struct CompressedSpritePalette *src); +void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer); +void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void* buffer, s32 species); +void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); +void LoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic); +void LoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic); + +#endif // GUARD_DECOMPRESS_H diff --git a/ld_script.txt b/ld_script.txt index 7986c7105..c9c35b0ae 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -9,13 +9,10 @@ SECTIONS { ewram (NOLOAD) : ALIGN(4) { - gHeap = .; - - . = 0x20000; <EWRAM> - . = 0x40000; + . = 0x60000; } . = 0x3000000; @@ -55,7 +52,7 @@ SECTIONS { asm/rtc.o(.text); asm/main_menu.o(.text); asm/rom3.o(.text); - asm/decompress.o(.text); + src/decompress.o(.text); asm/rom_8034C54.o(.text); asm/battle_3.o(.text); asm/battle_4.o(.text); diff --git a/src/decompress.c b/src/decompress.c new file mode 100644 index 000000000..4a5c7a297 --- /dev/null +++ b/src/decompress.c @@ -0,0 +1,597 @@ +#include "global.h" +#include "decompress.h" +#include "species.h" +#include "text.h" +#include "malloc.h" + +EWRAM_DATA ALIGNED(4) u8 gDecompressionBuffer[0x4000] = {0}; + +extern const struct CompressedSpriteSheet gMonFrontPicTable[]; +extern const struct CompressedSpriteSheet gMonBackPicTable[]; + +extern void DrawSpindaSpots(u16 species, u32 personality, void* dest, bool8 isFrontPic); + +static void DuplicateDeoxysTiles(void *pointer, s32 species); + +void LZDecompressWram(const void *src, void *dest) +{ + LZ77UnCompWram(src, dest); +} + +void LZDecompressVram(const void *src, void *dest) +{ + LZ77UnCompVram(src, dest); +} + +u16 LoadCompressedObjectPic(const struct CompressedSpriteSheet *src) +{ + struct SpriteSheet dest; + + LZ77UnCompWram(src->data, gDecompressionBuffer); + dest.data = gDecompressionBuffer; + dest.size = src->size; + dest.tag = src->tag; + return LoadSpriteSheet(&dest); +} + +void LoadCompressedObjectPicOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer) +{ + struct SpriteSheet dest; + + LZ77UnCompWram(src->data, buffer); + dest.data = buffer; + dest.size = src->size; + dest.tag = src->tag; + LoadSpriteSheet(&dest); +} + +void LoadCompressedObjectPalette(const struct CompressedSpritePalette *src) +{ + struct SpritePalette dest; + + LZ77UnCompWram(src->data, gDecompressionBuffer); + dest.data = (void*) gDecompressionBuffer; + dest.tag = src->tag; + LoadSpritePalette(&dest); +} + +void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer) +{ + struct SpritePalette dest; + + LZ77UnCompWram(a->data, buffer); + dest.data = buffer; + dest.tag = a->tag; + LoadSpritePalette(&dest); +} + +void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void* buffer, s32 species) +{ + if (species > SPECIES_EGG) + LZ77UnCompWram(gMonFrontPicTable[0].data, buffer); + else + LZ77UnCompWram(src->data, buffer); + DuplicateDeoxysTiles(buffer, species); +} + +void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality) +{ + bool8 isFrontPic; + + if (src == &gMonFrontPicTable[species]) + isFrontPic = TRUE; // frontPic + else + isFrontPic = FALSE; // backPic + + LoadSpecialPokePic_2(src, dest, species, personality, isFrontPic); +} + +void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic) +{ + if (species == SPECIES_UNOWN) + { + u16 i = (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 3)) % 0x1C; + + // The other Unowns are separate from Unown A. + if (i == 0) + i = SPECIES_UNOWN; + else + i += SPECIES_UNOWN_B - 1; + + if (!isFrontPic) + LZ77UnCompWram(gMonBackPicTable[i].data, dest); + else + LZ77UnCompWram(gMonFrontPicTable[i].data, dest); + } + else if (species > SPECIES_EGG) // is species unknown? draw the ? icon + LZ77UnCompWram(gMonFrontPicTable[0].data, dest); + else + LZ77UnCompWram(src->data, dest); + + DuplicateDeoxysTiles(dest, species); + DrawSpindaSpots(species, personality, dest, isFrontPic); +} + +void Unused_LZDecompressWramIndirect(const void **src, void *dest) +{ + LZ77UnCompWram(*src, dest); +} + +// This one (unused) function is really challenging, won't even try to decompile it. +__attribute__((naked)) +void sub_803471C() +{ + 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, 0x24\n\ + mov r9, r0\n\ + str r1, [sp]\n\ + str r2, [sp, 0x4]\n\ + adds r5, r3, 0\n\ + movs r0, 0x1\n\ + mov r1, r9\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0803473C\n\ + b _080348D4\n\ +_0803473C:\n\ + asrs r0, r1, 1\n\ + adds r0, 0x4\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x8]\n\ + movs r0, 0\n\ + ldr r2, [sp]\n\ + cmp r0, r2\n\ + blt _08034750\n\ + b _08034964\n\ +_08034750:\n\ + movs r4, 0x8\n\ + subs r1, r4, r1\n\ + str r1, [sp, 0x10]\n\ +_08034756:\n\ + movs r7, 0\n\ + adds r0, 0x1\n\ + str r0, [sp, 0x14]\n\ + ldr r0, [sp, 0x10]\n\ + cmp r7, r0\n\ + bge _080347D2\n\ + ldr r1, [sp, 0x8]\n\ + lsls r1, 8\n\ + str r1, [sp, 0x18]\n\ + movs r2, 0\n\ + mov r10, r2\n\ + mov r0, r9\n\ + movs r4, 0x8\n\ + subs r0, r4, r0\n\ + str r0, [sp, 0xC]\n\ +_08034774:\n\ + movs r3, 0\n\ + asrs r0, r7, 1\n\ + adds r1, r7, 0\n\ + movs r2, 0x1\n\ + ands r1, r2\n\ + str r1, [sp, 0x20]\n\ + lsls r0, 8\n\ + mov r8, r0\n\ + mov r12, r5\n\ +_08034786:\n\ + lsls r1, r3, 5\n\ + ldr r4, [sp, 0x18]\n\ + adds r0, r5, r4\n\ + adds r0, r1\n\ + mov r1, r8\n\ + adds r2, r0, r1\n\ + mov r1, r12\n\ + add r1, r8\n\ + movs r6, 0xF\n\ +_08034798:\n\ + ldr r4, [sp, 0x20]\n\ + cmp r4, 0\n\ + bne _080347A8\n\ + strb r4, [r1]\n\ + add r4, sp, 0x20\n\ + ldrb r4, [r4]\n\ + strb r4, [r2, 0x10]\n\ + b _080347B6\n\ +_080347A8:\n\ + mov r0, r10\n\ + strb r0, [r1, 0x10]\n\ + movs r4, 0x80\n\ + lsls r4, 1\n\ + adds r4, r2, r4\n\ + str r4, [sp, 0x1C]\n\ + strb r0, [r4]\n\ +_080347B6:\n\ + adds r2, 0x1\n\ + adds r1, 0x1\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _08034798\n\ + movs r0, 0x20\n\ + add r12, r0\n\ + adds r3, 0x1\n\ + cmp r3, 0x7\n\ + ble _08034786\n\ + adds r7, 0x1\n\ + ldr r1, [sp, 0xC]\n\ + cmp r7, r1\n\ + blt _08034774\n\ +_080347D2:\n\ + movs r7, 0\n\ + movs r2, 0\n\ +_080347D6:\n\ + movs r6, 0\n\ + adds r4, r7, 0x1\n\ + mov r8, r4\n\ + lsls r4, r7, 5\n\ +_080347DE:\n\ + adds r0, r6, 0x1\n\ + mov r10, r0\n\ + lsls r1, r6, 8\n\ + adds r0, r1, 0\n\ + adds r0, 0xC0\n\ + adds r0, r5, r0\n\ + adds r0, r4\n\ + adds r1, r5, r1\n\ + adds r1, r4\n\ + movs r3, 0x1F\n\ +_080347F2:\n\ + strb r2, [r1]\n\ + strb r2, [r0]\n\ + adds r0, 0x1\n\ + adds r1, 0x1\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _080347F2\n\ + mov r6, r10\n\ + cmp r6, 0x7\n\ + ble _080347DE\n\ + mov r7, r8\n\ + cmp r7, 0x1\n\ + ble _080347D6\n\ + mov r1, r9\n\ + cmp r1, 0x5\n\ + bne _08034818\n\ + movs r2, 0x90\n\ + lsls r2, 1\n\ + adds r5, r2\n\ +_08034818:\n\ + movs r7, 0\n\ + cmp r7, r9\n\ + bge _080348AE\n\ +_0803481E:\n\ + movs r3, 0\n\ + adds r7, 0x1\n\ + mov r8, r7\n\ + cmp r3, r9\n\ + bge _0803488E\n\ +_08034828:\n\ + adds r3, 0x1\n\ + mov r10, r3\n\ + ldr r4, [sp, 0x4]\n\ + adds r4, 0x20\n\ + adds r7, r5, 0\n\ + adds r7, 0x20\n\ + movs r0, 0x12\n\ + adds r0, r5\n\ + mov r12, r0\n\ + ldr r2, [sp, 0x4]\n\ + adds r3, r5, 0\n\ + movs r6, 0x3\n\ +_08034840:\n\ + ldrb r0, [r2]\n\ + mov r1, r12\n\ + strb r0, [r1]\n\ + ldrb r0, [r2, 0x1]\n\ + strb r0, [r1, 0x1]\n\ + ldrb r0, [r2, 0x2]\n\ + strb r0, [r1, 0x1E]\n\ + ldrb r0, [r2, 0x3]\n\ + strb r0, [r1, 0x1F]\n\ + movs r0, 0x81\n\ + lsls r0, 1\n\ + adds r1, r3, r0\n\ + ldrb r0, [r2, 0x10]\n\ + strb r0, [r1]\n\ + ldr r0, =0x00000103\n\ + adds r1, r3, r0\n\ + ldrb r0, [r2, 0x11]\n\ + strb r0, [r1]\n\ + movs r0, 0x90\n\ + lsls r0, 1\n\ + adds r1, r3, r0\n\ + ldrb r0, [r2, 0x12]\n\ + strb r0, [r1]\n\ + ldr r0, =0x00000121\n\ + adds r1, r3, r0\n\ + ldrb r0, [r2, 0x13]\n\ + strb r0, [r1]\n\ + movs r1, 0x4\n\ + add r12, r1\n\ + adds r2, 0x4\n\ + adds r3, 0x4\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _08034840\n\ + str r4, [sp, 0x4]\n\ + adds r5, r7, 0\n\ + mov r3, r10\n\ + cmp r3, r9\n\ + blt _08034828\n\ +_0803488E:\n\ + mov r2, r9\n\ + cmp r2, 0x7\n\ + bne _080348A0\n\ + adds r5, 0x20\n\ + b _080348A8\n\ + .pool\n\ +_080348A0:\n\ + mov r4, r9\n\ + cmp r4, 0x5\n\ + bne _080348A8\n\ + adds r5, 0x60\n\ +_080348A8:\n\ + mov r7, r8\n\ + cmp r7, r9\n\ + blt _0803481E\n\ +_080348AE:\n\ + mov r0, r9\n\ + cmp r0, 0x7\n\ + bne _080348BC\n\ + movs r1, 0x80\n\ + lsls r1, 1\n\ + adds r5, r1\n\ + b _080348C8\n\ +_080348BC:\n\ + mov r2, r9\n\ + cmp r2, 0x5\n\ + bne _080348C8\n\ + movs r4, 0xF0\n\ + lsls r4, 1\n\ + adds r5, r4\n\ +_080348C8:\n\ + ldr r0, [sp, 0x14]\n\ + ldr r1, [sp]\n\ + cmp r0, r1\n\ + bge _080348D2\n\ + b _08034756\n\ +_080348D2:\n\ + b _08034964\n\ +_080348D4:\n\ + movs r6, 0\n\ + ldr r2, [sp]\n\ + cmp r6, r2\n\ + bge _08034964\n\ +_080348DC:\n\ + adds r6, 0x1\n\ + mov r10, r6\n\ + mov r4, r9\n\ + cmp r4, 0x6\n\ + bne _080348F4\n\ + movs r0, 0\n\ + movs r3, 0xFF\n\ +_080348EA:\n\ + strb r0, [r5]\n\ + adds r5, 0x1\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _080348EA\n\ +_080348F4:\n\ + movs r7, 0\n\ + cmp r7, r9\n\ + bge _08034948\n\ +_080348FA:\n\ + adds r7, 0x1\n\ + mov r8, r7\n\ + mov r1, r9\n\ + lsls r0, r1, 5\n\ + cmp r1, 0x6\n\ + bne _08034914\n\ + movs r1, 0\n\ + movs r3, 0x1F\n\ +_0803490A:\n\ + strb r1, [r5]\n\ + adds r5, 0x1\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _0803490A\n\ +_08034914:\n\ + adds r1, r0, 0\n\ + cmp r1, 0\n\ + ble _0803492E\n\ + adds r3, r1, 0\n\ +_0803491C:\n\ + ldr r2, [sp, 0x4]\n\ + ldrb r0, [r2]\n\ + strb r0, [r5]\n\ + adds r2, 0x1\n\ + str r2, [sp, 0x4]\n\ + adds r5, 0x1\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bne _0803491C\n\ +_0803492E:\n\ + mov r4, r9\n\ + cmp r4, 0x6\n\ + bne _08034942\n\ + movs r0, 0\n\ + movs r3, 0x1F\n\ +_08034938:\n\ + strb r0, [r5]\n\ + adds r5, 0x1\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _08034938\n\ +_08034942:\n\ + mov r7, r8\n\ + cmp r7, r9\n\ + blt _080348FA\n\ +_08034948:\n\ + mov r0, r9\n\ + cmp r0, 0x6\n\ + bne _0803495C\n\ + movs r0, 0\n\ + movs r3, 0xFF\n\ +_08034952:\n\ + strb r0, [r5]\n\ + adds r5, 0x1\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _08034952\n\ +_0803495C:\n\ + mov r6, r10\n\ + ldr r1, [sp]\n\ + cmp r6, r1\n\ + blt _080348DC\n\ +_08034964:\n\ + add sp, 0x24\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"); +} + +u32 sub_8034974(void* ptr) +{ + u8* ptr_ = (u8*)(ptr); + return (ptr_[3] << 16) | (ptr_[2] << 8) | (ptr_[1]); +} + +bool8 LoadCompressedObjectPicUsingHeap(struct CompressedSpriteSheet* src) +{ + struct SpriteSheet dest; + void* buffer; + + buffer = AllocZeroed(*((u32*)(&src->data[0])) >> 8); + LZ77UnCompWram(src->data, buffer); + + dest.data = buffer; + dest.size = src->size; + dest.tag = src->tag; + + LoadSpriteSheet(&dest); + Free(buffer); + return FALSE; +} + +bool8 LoadCompressedObjectPaletteUsingHeap(const struct CompressedSpritePalette *src) +{ + struct SpritePalette dest; + void* buffer; + + buffer = AllocZeroed(*((u32*)(&src->data[0])) >> 8); + LZ77UnCompWram(src->data, buffer); + dest.data = buffer; + dest.tag = src->tag; + + LoadSpritePalette(&dest); + Free(buffer); + return FALSE; +} + +void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, void* buffer, s32 species) // a copy of DecompressPicFromTable +{ + if (species > SPECIES_EGG) + LZ77UnCompWram(gMonFrontPicTable[0].data, buffer); + else + LZ77UnCompWram(src->data, buffer); + DuplicateDeoxysTiles(buffer, species); +} + +void LoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic) // a copy of LoadSpecialPokePic +{ + if (species == SPECIES_UNOWN) + { + u16 i = (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 3)) % 0x1C; + + // The other Unowns are separate from Unown A. + if (i == 0) + i = SPECIES_UNOWN; + else + i += SPECIES_UNOWN_B - 1; + + if (!isFrontPic) + LZ77UnCompWram(gMonBackPicTable[i].data, dest); + else + LZ77UnCompWram(gMonFrontPicTable[i].data, dest); + } + else if (species > SPECIES_EGG) // is species unknown? draw the ? icon + LZ77UnCompWram(gMonFrontPicTable[0].data, dest); + else + LZ77UnCompWram(src->data, dest); + + DuplicateDeoxysTiles(dest, species); + DrawSpindaSpots(species, personality, dest, isFrontPic); +} + +void HandleLoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality) // a copy of HandleLoadSpecialPokePic +{ + bool8 isFrontPic; + + if (src == &gMonFrontPicTable[species]) + isFrontPic = TRUE; // frontPic + else + isFrontPic = FALSE; // backPic + + LoadSpecialPokePic_2(src, dest, species, personality, isFrontPic); +} + +void DecompressPicFromTable_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void* buffer, s32 species) // a copy of DecompressPicFromTable +{ + if (species > SPECIES_EGG) + LZ77UnCompWram(gMonFrontPicTable[0].data, buffer); + else + LZ77UnCompWram(src->data, buffer); +} + +void HandleLoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality) // a copy of HandleLoadSpecialPokePic +{ + bool8 isFrontPic; + + if (src == &gMonFrontPicTable[species]) + isFrontPic = TRUE; // frontPic + else + isFrontPic = FALSE; // backPic + + LoadSpecialPokePic_DontHandleDeoxys(src, dest, species, personality, isFrontPic); +} + +void LoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic) // a copy of LoadSpecialPokePic +{ + if (species == SPECIES_UNOWN) + { + u16 i = (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 3)) % 0x1C; + + // The other Unowns are separate from Unown A. + if (i == 0) + i = SPECIES_UNOWN; + else + i += SPECIES_UNOWN_B - 1; + + if (!isFrontPic) + LZ77UnCompWram(gMonBackPicTable[i].data, dest); + else + LZ77UnCompWram(gMonFrontPicTable[i].data, dest); + } + else if (species > SPECIES_EGG) // is species unknown? draw the ? icon + LZ77UnCompWram(gMonFrontPicTable[0].data, dest); + else + LZ77UnCompWram(src->data, dest); + + DrawSpindaSpots(species, personality, dest, isFrontPic); +} + +static void DuplicateDeoxysTiles(void *pointer, s32 species) +{ + if (species == SPECIES_DEOXYS) + CpuCopy32(pointer + 0x800, pointer, 0x800); +} diff --git a/src/malloc.c b/src/malloc.c index fd9dc616a..948303c6f 100644 --- a/src/malloc.c +++ b/src/malloc.c @@ -1,5 +1,7 @@ #include "global.h" +EWRAM_DATA u8 gHeap[0x1C000] = {0}; + static void *sHeapStart; static u32 sHeapSize; @@ -67,7 +69,7 @@ void *AllocInternal(void *heapStart, u32 size) // size, so split the rest into a separate block. foundBlockSize -= sizeof(struct MemBlock); foundBlockSize -= size; - + splitBlock = (struct MemBlock *)(pos->data + size); pos->flag = TRUE; diff --git a/sym_ewram.txt b/sym_ewram.txt index 3c132a99c..5ddf1365d 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1,3 +1,6 @@ + .include "src/malloc.o" + .include "src/decompress.o" + gTrainerId: @ 2020000 .space 0x4 |