summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2017-09-02 19:55:39 +0200
committerDizzyEggg <jajkodizzy@wp.pl>2017-09-02 19:55:39 +0200
commit7a831c215eabd589b2bdd0263b8c9ce069af6fe0 (patch)
tree4f8ff3635cc556501d525a5504c805dffb39685d
parent7ecdcc5ed89f7643f3845fea6ac668acbd1353d4 (diff)
decompile decompress.s
-rw-r--r--asm/battle_7.s10
-rw-r--r--asm/contest.s4
-rw-r--r--asm/contest_link_80F57C4.s4
-rw-r--r--asm/contest_painting.s4
-rw-r--r--asm/decompress.s1019
-rw-r--r--asm/egg_hatch.s2
-rw-r--r--asm/link.s2
-rw-r--r--asm/pokeblock_feed.s2
-rw-r--r--asm/rom_80A5C6C.s6
-rw-r--r--asm/rom_80C6FA0.s2
-rw-r--r--asm/rom_8184DA4.s4
-rw-r--r--asm/rom_81BAD84.s12
-rw-r--r--asm/script_pokemon_util_80F87D8.s4
-rw-r--r--asm/trade.s8
-rw-r--r--include/decompress.h17
-rw-r--r--ld_script.txt7
-rw-r--r--src/decompress.c597
-rw-r--r--src/malloc.c4
-rw-r--r--sym_ewram.txt3
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