From f52d439a8588f82268ed199ce08ce3c792071ff3 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 28 Jun 2019 01:56:26 +0800 Subject: finished decompress (1 failed attempt) --- asm/battle_1.s | 2 +- asm/battle_anim.s | 4 +- asm/battle_anim_special.s | 12 +- asm/battle_anim_status_effects.s | 4 +- asm/battle_gfx_sfx_util.s | 36 +- asm/battle_interface.s | 2 +- asm/berry_crush_3.s | 2 +- asm/berry_pouch.s | 4 +- asm/credits.s | 14 +- asm/decompress.s | 887 --------------------------------------- asm/evolution_graphics.s | 2 +- asm/field_effect.s | 4 +- asm/hall_of_fame.s | 4 +- asm/intro.s | 4 +- asm/item_menu.s | 8 +- asm/link_rfu.s | 2 +- asm/link_rfu_2.s | 2 +- asm/menu_indicators.s | 6 +- asm/party_menu.s | 10 +- asm/pokeball.s | 12 +- asm/pokedex_area_markers.s | 2 +- asm/pokemon_jump.s | 2 +- asm/pokemon_jump_2.s | 6 +- asm/pokemon_special_anim.s | 8 +- asm/pokemon_storage_system.s | 4 +- asm/slot_machine.s | 2 +- asm/smokescreen.s | 4 +- asm/title_screen.s | 2 +- asm/trade.s | 8 +- asm/union_room_chat.s | 2 +- include/decompress.h | 19 +- ld_script.txt | 2 +- src/daycare.c | 4 +- src/decompress.c | 664 +++++++++++++++++++++++++++++ src/egg_hatch.c | 4 +- src/item_menu_icons.c | 4 +- src/item_pc.c | 4 +- src/mevent_8145654.c | 2 +- src/oak_speech.c | 10 +- src/tm_case.c | 2 +- src/trainer_pokemon_sprites.c | 4 +- src/unk_815C980.c | 2 +- src/unk_815F138.c | 2 +- 43 files changed, 778 insertions(+), 1006 deletions(-) delete mode 100644 asm/decompress.s create mode 100644 src/decompress.c diff --git a/asm/battle_1.s b/asm/battle_1.s index 87cb0e750..d60536883 100644 --- a/asm/battle_1.s +++ b/asm/battle_1.s @@ -1197,7 +1197,7 @@ sub_800FAE0: @ 800FAE0 ldr r0, _0800FB8C @ =gBattle_BG2_Y strh r1, [r0] ldr r0, _0800FB90 @ =gUnknown_8248318 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap b _0800FC26 .align 2, 0 _0800FB64: .4byte gBattleTypeFlags diff --git a/asm/battle_anim.s b/asm/battle_anim.s index 7e698830f..9aa80db64 100644 --- a/asm/battle_anim.s +++ b/asm/battle_anim.s @@ -483,11 +483,11 @@ ScriptCmd_loadspritegfx: @ 8072868 lsls r5, r4, 3 ldr r0, _080728B8 @ =gUnknown_8399388 adds r0, r5, r0 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r0, _080728BC @ =gUnknown_8399C90 adds r5, r0 adds r0, r5, 0 - bl sub_800F078 + bl LoadCompressedSpritePaletteUsingHeap ldr r0, [r6] adds r0, 0x2 str r0, [r6] diff --git a/asm/battle_anim_special.s b/asm/battle_anim_special.s index 704a1e9a7..02a1216c6 100644 --- a/asm/battle_anim_special.s +++ b/asm/battle_anim_special.s @@ -3264,10 +3264,10 @@ sub_80F05B4: @ 80F05B4 cmp r0, r1 bne _080F05DA adds r0, r4, 0 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r0, _080F05E8 @ =gUnknown_840BFA8 adds r0, r5, r0 - bl sub_800F078 + bl LoadCompressedSpritePaletteUsingHeap _080F05DA: pop {r4,r5} pop {r0} @@ -5514,9 +5514,9 @@ _080F177E: cmp r0, r7 bne _080F179E ldr r0, _080F17E8 @ =gUnknown_83AD350 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r0, _080F17EC @ =gUnknown_83ADC58 - bl sub_800F078 + bl LoadCompressedSpritePaletteUsingHeap _080F179E: ldr r5, _080F17F0 @ =sub_80F181C adds r0, r5, 0 @@ -5941,9 +5941,9 @@ sub_80F1AE0: @ 80F1AE0 lsls r4, 24 lsrs r4, 24 ldr r0, _080F1B08 @ =gUnknown_83AD470 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r0, _080F1B0C @ =gUnknown_83ADD78 - bl sub_800F078 + bl LoadCompressedSpritePaletteUsingHeap ldr r0, _080F1B10 @ =0x0000281d bl IndexOfSpritePaletteTag adds r0, r4, 0 diff --git a/asm/battle_anim_status_effects.s b/asm/battle_anim_status_effects.s index 5530fd869..b1da74298 100644 --- a/asm/battle_anim_status_effects.s +++ b/asm/battle_anim_status_effects.s @@ -26,9 +26,9 @@ sub_8078178: @ 8078178 lsrs r0, 24 mov r8, r0 ldr r0, _08078224 @ =gUnknown_83AD048 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r0, _08078228 @ =gUnknown_83AD950 - bl sub_800F078 + bl LoadCompressedSpritePaletteUsingHeap ldr r1, _0807822C @ =gTasks mov r2, r8 lsls r0, r2, 2 diff --git a/asm/battle_gfx_sfx_util.s b/asm/battle_gfx_sfx_util.s index efbd89e9e..ba54bafbb 100644 --- a/asm/battle_gfx_sfx_util.s +++ b/asm/battle_gfx_sfx_util.s @@ -975,7 +975,7 @@ _08034548: ldr r1, [r1] adds r2, r5, 0 adds r3, r4, 0 - bl sub_800ECC4 + bl HandleLoadSpecialPokePic _08034562: mov r2, r8 lsls r1, r2, 4 @@ -1184,7 +1184,7 @@ sub_80346C4: @ 80346C4 ldr r0, _0803474C @ =gTrainerFrontPicPaletteTable adds r5, r0 adds r0, r5, 0 - bl sub_800F078 + bl LoadCompressedSpritePaletteUsingHeap add sp, 0x8 pop {r3} mov r8, r3 @@ -1262,9 +1262,9 @@ sub_80347A8: @ 80347A8 cmp r0, 0 bne _080347E0 ldr r0, _080347D8 @ =gUnknown_8260208 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r0, _080347DC @ =gUnknown_8260210 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap movs r5, 0x2 b _08034802 .align 2, 0 @@ -1274,16 +1274,16 @@ _080347DC: .4byte gUnknown_8260210 _080347E0: ldr r4, _08034828 @ =gUnknown_8260218 adds r0, r4, 0 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap adds r4, 0x8 adds r0, r4, 0 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r4, _0803482C @ =gUnknown_8260228 adds r0, r4, 0 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap adds r4, 0x8 adds r0, r4, 0 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap movs r5, 0x4 _08034802: movs r4, 0 @@ -1296,7 +1296,7 @@ _0803480C: ldrb r0, [r0] lsls r0, 3 adds r0, r6 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap adds r0, r4, 0x1 lsls r0, 24 lsrs r4, r0, 24 @@ -1349,14 +1349,14 @@ _08034864: cmp r0, 0 beq _08034890 ldr r0, _0803488C @ =gUnknown_8260238 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap b _0803495A .align 2, 0 _08034888: .4byte gBattleTypeFlags _0803488C: .4byte gUnknown_8260238 _08034890: ldr r0, _08034898 @ =gUnknown_8260208 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap b _0803495A .align 2, 0 _08034898: .4byte gUnknown_8260208 @@ -1364,7 +1364,7 @@ _0803489C: cmp r4, 0x3 bne _080348AC ldr r0, _080348A8 @ =gUnknown_8260210 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap b _0803495A .align 2, 0 _080348A8: .4byte gUnknown_8260210 @@ -1388,7 +1388,7 @@ _080348CC: cmp r4, 0x2 bne _080348DC ldr r0, _080348D8 @ =gUnknown_8260218 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap b _0803495A .align 2, 0 _080348D8: .4byte gUnknown_8260218 @@ -1396,7 +1396,7 @@ _080348DC: cmp r4, 0x3 bne _080348EC ldr r0, _080348E8 @ =gUnknown_8260220 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap b _0803495A .align 2, 0 _080348E8: .4byte gUnknown_8260220 @@ -1404,7 +1404,7 @@ _080348EC: cmp r4, 0x4 bne _080348FC ldr r0, _080348F8 @ =gUnknown_8260228 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap b _0803495A .align 2, 0 _080348F8: .4byte gUnknown_8260228 @@ -1412,7 +1412,7 @@ _080348FC: cmp r4, 0x5 bne _0803490C ldr r0, _08034908 @ =gUnknown_8260230 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap b _0803495A .align 2, 0 _08034908: .4byte gUnknown_8260230 @@ -1449,7 +1449,7 @@ _08034944: lsls r0, 3 ldr r1, _08034954 @ =gUnknown_8260240 adds r0, r1 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap b _0803495A .align 2, 0 _08034950: .4byte gUnknown_2023BD6 @@ -2911,7 +2911,7 @@ LoadAndCreateEnemyShadowSprites: @ 8035538 mov r7, r8 push {r7} ldr r0, _08035614 @ =gUnknown_8250A0C - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap movs r0, 0x1 bl GetBattlerAtPosition adds r5, r0, 0 diff --git a/asm/battle_interface.s b/asm/battle_interface.s index 393eb4ee6..fa06f684b 100644 --- a/asm/battle_interface.s +++ b/asm/battle_interface.s @@ -2381,7 +2381,7 @@ _08048DC4: bge _08048DB0 mov r6, r10 adds r0, r4, r6 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r0, _08048E4C @ =gUnknown_826049C adds r0, r4, r0 bl LoadSpriteSheet diff --git a/asm/berry_crush_3.s b/asm/berry_crush_3.s index f447c848f..f9c5008d8 100644 --- a/asm/berry_crush_3.s +++ b/asm/berry_crush_3.s @@ -2845,7 +2845,7 @@ sub_814ECE0: @ 814ECE0 _0814ECF6: lsls r0, r5, 3 adds r0, r4 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet adds r0, r5, 0x1 lsls r0, 24 lsrs r5, r0, 24 diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index 67d189a12..d3890c6e8 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -498,7 +498,7 @@ _0813D170: .4byte gSaveBlock2Ptr _0813D174: .4byte gUnknown_8E85BF4 _0813D178: ldr r0, _0813D18C @ =gUnknown_84644A8 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet _0813D17E: ldr r1, [r5] adds r1, r6 @@ -510,7 +510,7 @@ _0813D17E: _0813D18C: .4byte gUnknown_84644A8 _0813D190: ldr r0, _0813D1A8 @ =gUnknown_84644B0 - bl LoadCompressedObjectPalette + bl LoadCompressedSpritePalette ldr r0, _0813D1AC @ =gUnknown_203F36C ldr r0, [r0] ldr r1, _0813D1B0 @ =0x0000080c diff --git a/asm/credits.s b/asm/credits.s index 6317b95f7..e52275e77 100644 --- a/asm/credits.s +++ b/asm/credits.s @@ -1987,7 +1987,7 @@ _080F49D8: ands r1, r3 orrs r1, r2 str r1, [r0, 0x4] - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _080F4A1C @ =gUnknown_8410E10 b _080F4A36 .align 2, 0 @@ -2005,7 +2005,7 @@ _080F4A20: strh r1, [r0, 0x4] ldrh r1, [r6, 0x2] strh r1, [r0, 0x6] - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _080F4A48 @ =gUnknown_8411BF8 _080F4A36: movs r1, 0xF8 @@ -2025,7 +2025,7 @@ _080F4A4C: strh r1, [r0, 0x4] ldrh r1, [r6, 0x2] strh r1, [r0, 0x6] - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _080F4ADC @ =gUnknown_84129A0 movs r1, 0xF8 lsls r1, 1 @@ -2107,7 +2107,7 @@ _080F4AFE: strh r1, [r0, 0x4] ldrh r1, [r6, 0x8] strh r1, [r0, 0x6] - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _080F4B1C @ =gUnknown_8413318 b _080F4B8A .align 2, 0 @@ -2122,7 +2122,7 @@ _080F4B20: strh r1, [r0, 0x4] ldrh r1, [r6, 0x8] strh r1, [r0, 0x6] - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _080F4B4C @ =gUnknown_8413318 movs r1, 0xF0 lsls r1, 1 @@ -2144,7 +2144,7 @@ _080F4B54: strh r1, [r0, 0x4] ldrh r1, [r6, 0x8] strh r1, [r0, 0x6] - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _080F4B70 @ =gUnknown_8413854 b _080F4B8A .align 2, 0 @@ -2159,7 +2159,7 @@ _080F4B74: strh r1, [r0, 0x4] ldrh r1, [r6, 0x8] strh r1, [r0, 0x6] - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _080F4BF0 @ =gUnknown_8413D98 _080F4B8A: movs r1, 0xF0 diff --git a/asm/decompress.s b/asm/decompress.s deleted file mode 100644 index cc38e0df5..000000000 --- a/asm/decompress.s +++ /dev/null @@ -1,887 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start LZDecompressWram -LZDecompressWram: @ 800EBB4 - push {lr} - bl LZ77UnCompWram - pop {r0} - bx r0 - thumb_func_end LZDecompressWram - - thumb_func_start LZDecompressVram -LZDecompressVram: @ 800EBC0 - push {lr} - bl LZ77UnCompVram - pop {r0} - bx r0 - thumb_func_end LZDecompressVram - - thumb_func_start LoadCompressedObjectPic -LoadCompressedObjectPic: @ 800EBCC - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r0, [r4] - ldr r5, _0800EBFC @ =gDecompressionBuffer - 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 - .align 2, 0 -_0800EBFC: .4byte gDecompressionBuffer - thumb_func_end LoadCompressedObjectPic - - thumb_func_start LoadCompressedObjectPicOverrideBuffer -LoadCompressedObjectPicOverrideBuffer: @ 800EC00 - 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: @ 800EC28 - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - ldr r0, [r5] - ldr r4, _0800EC54 @ =gDecompressionBuffer - adds r1, r4, 0 - bl LZ77UnCompWram - str r4, [sp] - ldrh r2, [r5, 0x4] - ldr r1, _0800EC58 @ =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 -_0800EC54: .4byte gDecompressionBuffer -_0800EC58: .4byte 0xffff0000 - thumb_func_end LoadCompressedObjectPalette - - thumb_func_start LoadCompressedObjectPaletteOverrideBuffer -LoadCompressedObjectPaletteOverrideBuffer: @ 800EC5C - 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, _0800EC88 @ =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 -_0800EC88: .4byte 0xffff0000 - thumb_func_end LoadCompressedObjectPaletteOverrideBuffer - - thumb_func_start DecompressPicFromTable -DecompressPicFromTable: @ 800EC8C - 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 _0800ECAC - ldr r0, _0800ECA8 @ =gMonFrontPicTable - ldr r0, [r0] - bl LZ77UnCompWram - b _0800ECB4 - .align 2, 0 -_0800ECA8: .4byte gMonFrontPicTable -_0800ECAC: - ldr r0, [r3] - adds r1, r4, 0 - bl LZ77UnCompWram -_0800ECB4: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_800EDAC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end DecompressPicFromTable - - thumb_func_start sub_800ECC4 -sub_800ECC4: @ 800ECC4 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r0, r2, 3 - ldr r1, _0800ECEC @ =gMonFrontPicTable - adds r0, r1 - movs r1, 0 - cmp r4, r0 - bne _0800ECDA - movs r1, 0x1 -_0800ECDA: - str r1, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - bl LoadSpecialPokePic - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800ECEC: .4byte gMonFrontPicTable - thumb_func_end sub_800ECC4 - - thumb_func_start LoadSpecialPokePic -LoadSpecialPokePic: @ 800ECF0 - 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 _0800ED6C - 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 _0800ED3E - movs r1, 0xC9 - b _0800ED48 -_0800ED3E: - movs r2, 0xCE - lsls r2, 1 - adds r0, r1, r2 - lsls r0, 16 - lsrs r1, r0, 16 -_0800ED48: - mov r0, r8 - cmp r0, 0 - bne _0800ED5C - ldr r0, _0800ED58 @ =gMonBackPicTable - lsls r1, 3 - adds r1, r0 - ldr r0, [r1] - b _0800ED78 - .align 2, 0 -_0800ED58: .4byte gMonBackPicTable -_0800ED5C: - ldr r0, _0800ED68 @ =gMonFrontPicTable - lsls r1, 3 - adds r1, r0 - ldr r0, [r1] - b _0800ED78 - .align 2, 0 -_0800ED68: .4byte gMonFrontPicTable -_0800ED6C: - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - ble _0800ED84 - ldr r0, _0800ED80 @ =gMonFrontPicTable - ldr r0, [r0] -_0800ED78: - adds r1, r4, 0 - bl LZ77UnCompWram - b _0800ED8C - .align 2, 0 -_0800ED80: .4byte gMonFrontPicTable -_0800ED84: - ldr r0, [r6] - adds r1, r4, 0 - bl LZ77UnCompWram -_0800ED8C: - adds r0, r4, 0 - adds r1, r7, 0 - bl sub_800EDAC - 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 LoadSpecialPokePic - - thumb_func_start sub_800EDAC -sub_800EDAC: @ 800EDAC - push {lr} - adds r3, r0, 0 - movs r0, 0xCD - lsls r0, 1 - cmp r1, r0 - bne _0800EDC6 - movs r1, 0x80 - lsls r1, 4 - adds r0, r3, r1 - ldr r2, _0800EDCC @ =0x04000200 - adds r1, r3, 0 - bl CpuSet -_0800EDC6: - pop {r0} - bx r0 - .align 2, 0 -_0800EDCC: .4byte 0x04000200 - thumb_func_end sub_800EDAC - - thumb_func_start sub_800EDD0 -sub_800EDD0: @ 800EDD0 - push {lr} - ldr r0, [r0] - bl LZ77UnCompWram - pop {r0} - bx r0 - thumb_func_end sub_800EDD0 - - thumb_func_start sub_800EDDC -sub_800EDDC: @ 800EDDC - 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 _0800EDFC - b _0800EF94 -_0800EDFC: - 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 _0800EE10 - b _0800F024 -_0800EE10: - movs r4, 0x8 - subs r1, r4, r1 - str r1, [sp, 0x10] -_0800EE16: - movs r7, 0 - adds r0, 0x1 - str r0, [sp, 0x14] - ldr r0, [sp, 0x10] - cmp r7, r0 - bge _0800EE92 - 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] -_0800EE34: - 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 -_0800EE46: - 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 -_0800EE58: - ldr r4, [sp, 0x20] - cmp r4, 0 - bne _0800EE68 - strb r4, [r1] - add r4, sp, 0x20 - ldrb r4, [r4] - strb r4, [r2, 0x10] - b _0800EE76 -_0800EE68: - mov r0, r10 - strb r0, [r1, 0x10] - movs r4, 0x80 - lsls r4, 1 - adds r4, r2, r4 - str r4, [sp, 0x1C] - strb r0, [r4] -_0800EE76: - adds r2, 0x1 - adds r1, 0x1 - subs r6, 0x1 - cmp r6, 0 - bge _0800EE58 - movs r0, 0x20 - add r12, r0 - adds r3, 0x1 - cmp r3, 0x7 - ble _0800EE46 - adds r7, 0x1 - ldr r1, [sp, 0xC] - cmp r7, r1 - blt _0800EE34 -_0800EE92: - movs r7, 0 - movs r2, 0 -_0800EE96: - movs r6, 0 - adds r4, r7, 0x1 - mov r8, r4 - lsls r4, r7, 5 -_0800EE9E: - 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 -_0800EEB2: - strb r2, [r1] - strb r2, [r0] - adds r0, 0x1 - adds r1, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _0800EEB2 - mov r6, r10 - cmp r6, 0x7 - ble _0800EE9E - mov r7, r8 - cmp r7, 0x1 - ble _0800EE96 - mov r1, r9 - cmp r1, 0x5 - bne _0800EED8 - movs r2, 0x90 - lsls r2, 1 - adds r5, r2 -_0800EED8: - movs r7, 0 - cmp r7, r9 - bge _0800EF6E -_0800EEDE: - movs r3, 0 - adds r7, 0x1 - mov r8, r7 - cmp r3, r9 - bge _0800EF4E -_0800EEE8: - 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 -_0800EF00: - 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, _0800EF58 @ =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, _0800EF5C @ =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 _0800EF00 - str r4, [sp, 0x4] - adds r5, r7, 0 - mov r3, r10 - cmp r3, r9 - blt _0800EEE8 -_0800EF4E: - mov r2, r9 - cmp r2, 0x7 - bne _0800EF60 - adds r5, 0x20 - b _0800EF68 - .align 2, 0 -_0800EF58: .4byte 0x00000103 -_0800EF5C: .4byte 0x00000121 -_0800EF60: - mov r4, r9 - cmp r4, 0x5 - bne _0800EF68 - adds r5, 0x60 -_0800EF68: - mov r7, r8 - cmp r7, r9 - blt _0800EEDE -_0800EF6E: - mov r0, r9 - cmp r0, 0x7 - bne _0800EF7C - movs r1, 0x80 - lsls r1, 1 - adds r5, r1 - b _0800EF88 -_0800EF7C: - mov r2, r9 - cmp r2, 0x5 - bne _0800EF88 - movs r4, 0xF0 - lsls r4, 1 - adds r5, r4 -_0800EF88: - ldr r0, [sp, 0x14] - ldr r1, [sp] - cmp r0, r1 - bge _0800EF92 - b _0800EE16 -_0800EF92: - b _0800F024 -_0800EF94: - movs r6, 0 - ldr r2, [sp] - cmp r6, r2 - bge _0800F024 -_0800EF9C: - adds r6, 0x1 - mov r10, r6 - mov r4, r9 - cmp r4, 0x6 - bne _0800EFB4 - movs r0, 0 - movs r3, 0xFF -_0800EFAA: - strb r0, [r5] - adds r5, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _0800EFAA -_0800EFB4: - movs r7, 0 - cmp r7, r9 - bge _0800F008 -_0800EFBA: - adds r7, 0x1 - mov r8, r7 - mov r1, r9 - lsls r0, r1, 5 - cmp r1, 0x6 - bne _0800EFD4 - movs r1, 0 - movs r3, 0x1F -_0800EFCA: - strb r1, [r5] - adds r5, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _0800EFCA -_0800EFD4: - adds r1, r0, 0 - cmp r1, 0 - ble _0800EFEE - adds r3, r1, 0 -_0800EFDC: - 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 _0800EFDC -_0800EFEE: - mov r4, r9 - cmp r4, 0x6 - bne _0800F002 - movs r0, 0 - movs r3, 0x1F -_0800EFF8: - strb r0, [r5] - adds r5, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _0800EFF8 -_0800F002: - mov r7, r8 - cmp r7, r9 - blt _0800EFBA -_0800F008: - mov r0, r9 - cmp r0, 0x6 - bne _0800F01C - movs r0, 0 - movs r3, 0xFF -_0800F012: - strb r0, [r5] - adds r5, 0x1 - subs r3, 0x1 - cmp r3, 0 - bge _0800F012 -_0800F01C: - mov r6, r10 - ldr r1, [sp] - cmp r6, r1 - blt _0800EF9C -_0800F024: - 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_800EDDC - - thumb_func_start sub_800F034 -sub_800F034: @ 800F034 - 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 - cmp r5, 0 - beq _0800F06E - 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 - b _0800F070 -_0800F06E: - movs r0, 0x1 -_0800F070: - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_800F034 - - thumb_func_start sub_800F078 -sub_800F078: @ 800F078 - 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 - cmp r5, 0 - beq _0800F0B8 - ldr r0, [r4] - adds r1, r5, 0 - bl LZ77UnCompWram - str r5, [sp] - ldrh r2, [r4, 0x4] - ldr r1, _0800F0B4 @ =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 - b _0800F0BA - .align 2, 0 -_0800F0B4: .4byte 0xffff0000 -_0800F0B8: - movs r0, 0x1 -_0800F0BA: - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_800F078 - - thumb_func_start GetDecompressedDataSize -GetDecompressedDataSize: @ 800F0C4 - sub sp, 0x4 - mov r3, sp - ldrb r2, [r0, 0x1] - mov r1, sp - strb r2, [r1] - ldrb r1, [r0, 0x2] - strb r1, [r3, 0x1] - ldrb r0, [r0, 0x3] - strb r0, [r3, 0x2] - movs r0, 0 - strb r0, [r3, 0x3] - ldr r0, [sp] - add sp, 0x4 - bx lr - thumb_func_end GetDecompressedDataSize - - thumb_func_start DecompressPicFromTable_DontHandleDeoxys -DecompressPicFromTable_DontHandleDeoxys: @ 800F0E0 - push {lr} - adds r3, r0, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r2, r0 - ble _0800F0FC - ldr r0, _0800F0F8 @ =gMonFrontPicTable - ldr r0, [r0] - bl LZ77UnCompWram - b _0800F102 - .align 2, 0 -_0800F0F8: .4byte gMonFrontPicTable -_0800F0FC: - ldr r0, [r3] - bl LZ77UnCompWram -_0800F102: - pop {r0} - bx r0 - thumb_func_end DecompressPicFromTable_DontHandleDeoxys - - thumb_func_start HandleLoadSpecialPokePic_DontHandleDeoxys -HandleLoadSpecialPokePic_DontHandleDeoxys: @ 800F108 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r0, r2, 3 - ldr r1, _0800F130 @ =gMonFrontPicTable - adds r0, r1 - movs r1, 0 - cmp r4, r0 - bne _0800F11E - movs r1, 0x1 -_0800F11E: - str r1, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - bl LoadSpecialPokePic_DontHandleDeoxys - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800F130: .4byte gMonFrontPicTable - thumb_func_end HandleLoadSpecialPokePic_DontHandleDeoxys - - thumb_func_start LoadSpecialPokePic_DontHandleDeoxys -LoadSpecialPokePic_DontHandleDeoxys: @ 800F134 - 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 _0800F1B0 - 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 _0800F182 - movs r1, 0xC9 - b _0800F18C -_0800F182: - movs r2, 0xCE - lsls r2, 1 - adds r0, r1, r2 - lsls r0, 16 - lsrs r1, r0, 16 -_0800F18C: - mov r0, r8 - cmp r0, 0 - bne _0800F1A0 - ldr r0, _0800F19C @ =gMonBackPicTable - lsls r1, 3 - adds r1, r0 - ldr r0, [r1] - b _0800F1BC - .align 2, 0 -_0800F19C: .4byte gMonBackPicTable -_0800F1A0: - ldr r0, _0800F1AC @ =gMonFrontPicTable - lsls r1, 3 - adds r1, r0 - ldr r0, [r1] - b _0800F1BC - .align 2, 0 -_0800F1AC: .4byte gMonFrontPicTable -_0800F1B0: - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - ble _0800F1C8 - ldr r0, _0800F1C4 @ =gMonFrontPicTable - ldr r0, [r0] -_0800F1BC: - adds r1, r5, 0 - bl LZ77UnCompWram - b _0800F1D0 - .align 2, 0 -_0800F1C4: .4byte gMonFrontPicTable -_0800F1C8: - ldr r0, [r6] - adds r1, r5, 0 - bl LZ77UnCompWram -_0800F1D0: - 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 LoadSpecialPokePic_DontHandleDeoxys - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/evolution_graphics.s b/asm/evolution_graphics.s index 1dafc92ea..64edbdf7a 100644 --- a/asm/evolution_graphics.s +++ b/asm/evolution_graphics.s @@ -573,7 +573,7 @@ _080F5D80: .4byte SpriteCB_PostEvoSparkleSet2 LoadEvoSparkleSpriteAndPal: @ 80F5D84 push {lr} ldr r0, _080F5D98 @ =gUnknown_841EEC4 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r0, _080F5D9C @ =gUnknown_841EED4 bl LoadSpritePalettes pop {r0} diff --git a/asm/field_effect.s b/asm/field_effect.s index 0fa36ce46..255379525 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -608,12 +608,12 @@ CreateTrainerSprite: @ 8083858 add r8, r4 mov r0, r8 adds r1, r7, 0 - bl LoadCompressedObjectPaletteOverrideBuffer + bl LoadCompressedSpritePaletteOverrideBuffer ldr r0, _080838E4 @ =gTrainerFrontPicTable adds r4, r0 adds r0, r4, 0 adds r1, r7, 0 - bl LoadCompressedObjectPicOverrideBuffer + bl LoadCompressedSpriteSheetOverrideBuffer mov r1, sp ldrh r0, [r4, 0x6] movs r2, 0 diff --git a/asm/hall_of_fame.s b/asm/hall_of_fame.s index 97bf9ef64..c70a06c58 100644 --- a/asm/hall_of_fame.s +++ b/asm/hall_of_fame.s @@ -3080,9 +3080,9 @@ sub_80F36BC: @ 80F36BC movs r0, 0x8 strb r0, [r1] ldr r0, _080F36F0 @ =gUnknown_840C248 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _080F36F4 @ =gUnknown_840C258 - bl LoadCompressedObjectPalette + bl LoadCompressedSpritePalette pop {r0} bx r0 .align 2, 0 diff --git a/asm/intro.s b/asm/intro.s index 909fee72e..de2b73004 100644 --- a/asm/intro.s +++ b/asm/intro.s @@ -2759,7 +2759,7 @@ sub_80EDC40: @ 80EDC40 ldr r4, _080EDCE4 @ =gUnknown_840BBC0 _080EDC46: adds r0, r4, 0 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet adds r4, 0x8 adds r5, 0x1 cmp r5, 0x4 @@ -4823,7 +4823,7 @@ sub_80EEBE4: @ 80EEBE4 ldr r4, _080EEC04 @ =gUnknown_840BEDC _080EEBEA: adds r0, r4, 0 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet adds r4, 0x8 adds r5, 0x1 cmp r5, 0x6 diff --git a/asm/item_menu.s b/asm/item_menu.s index 4e4c2ebfd..d01991989 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -676,20 +676,20 @@ _0810832C: .4byte gSaveBlock2Ptr _08108330: .4byte gUnknown_83D41E4 _08108334: ldr r0, _0810833C @ =gUnknown_83D41EC - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet b _08108352 .align 2, 0 _0810833C: .4byte gUnknown_83D41EC _08108340: ldr r0, _08108348 @ =gUnknown_83D41F4 - bl LoadCompressedObjectPalette + bl LoadCompressedSpritePalette b _08108352 .align 2, 0 _08108348: .4byte gUnknown_83D41F4 _0810834C: ldr r0, _08108360 @ =gBagSwapSpriteSheet _0810834E: - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet _08108352: ldr r0, _08108364 @ =gUnknown_203AD10 ldr r1, [r0] @@ -702,7 +702,7 @@ _08108360: .4byte gBagSwapSpriteSheet _08108364: .4byte gUnknown_203AD10 _08108368: ldr r0, _08108378 @ =gBagSwapSpritePalette - bl LoadCompressedObjectPalette + bl LoadCompressedSpritePalette ldr r1, [r4] movs r0, 0 strb r0, [r1, 0x10] diff --git a/asm/link_rfu.s b/asm/link_rfu.s index a2b6a20fc..c6918f6ad 100644 --- a/asm/link_rfu.s +++ b/asm/link_rfu.s @@ -9465,7 +9465,7 @@ sub_8101A90: @ 8101A90 ldr r4, _08101AC0 @ =gUnknown_843F938 _08101AA2: adds r0, r4, 0 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet adds r4, 0x8 adds r5, 0x1 cmp r5, 0x3 diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s index feb7c886f..2bfeaca50 100644 --- a/asm/link_rfu_2.s +++ b/asm/link_rfu_2.s @@ -9525,7 +9525,7 @@ sub_80FCEA8: @ 80FCEA8 cmp r0, r1 bne _080FCEC0 adds r0, r4, 0 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet _080FCEC0: ldr r0, _080FCEDC @ =gUnknown_843F27C bl LoadSpritePalette diff --git a/asm/menu_indicators.s b/asm/menu_indicators.s index 28e783731..d7b78b1b2 100644 --- a/asm/menu_indicators.s +++ b/asm/menu_indicators.s @@ -180,7 +180,7 @@ AddScrollIndicatorArrowPair: @ 8133A20 orrs r0, r1 str r0, [sp, 0x8] add r0, sp, 0x4 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldrh r2, [r6, 0xC] cmp r2, r4 bne _08133A7C @@ -727,7 +727,7 @@ ListMenuAddRedOutlineCursorObject: @ 8133E38 ands r1, r3 orrs r1, r2 str r1, [r0, 0x4] - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldrh r2, [r6, 0x8] ldr r7, _08133E8C @ =0x0000ffff cmp r2, r7 @@ -1005,7 +1005,7 @@ ListMenuAddRedArrowCursorObject: @ 8134070 ands r1, r4 orrs r1, r2 str r1, [r0, 0x4] - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldrh r2, [r5, 0x8] cmp r2, r4 bne _081340C4 diff --git a/asm/party_menu.s b/asm/party_menu.s index 9042219e3..104ba9f7f 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -8013,11 +8013,11 @@ _0812285C: .4byte 0x0000fffc sub_8122860: @ 8122860 push {lr} ldr r0, _08122878 @ =gUnknown_845A474 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _0812287C @ =gUnknown_845A4EC - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _08122880 @ =gUnknown_845A47C - bl LoadCompressedObjectPalette + bl LoadCompressedSpritePalette pop {r0} bx r0 .align 2, 0 @@ -8164,9 +8164,9 @@ _0812297C: .4byte gSprites sub_8122980: @ 8122980 push {lr} ldr r0, _08122994 @ =gUnknown_845A574 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _08122998 @ =gUnknown_845A57C - bl LoadCompressedObjectPalette + bl LoadCompressedSpritePalette pop {r0} bx r0 .align 2, 0 diff --git a/asm/pokeball.s b/asm/pokeball.s index eace88832..85bfcb620 100644 --- a/asm/pokeball.s +++ b/asm/pokeball.s @@ -2029,9 +2029,9 @@ CreatePokeballSpriteToReleaseMon: @ 804B908 lsls r0, 24 lsrs r7, r0, 24 ldr r0, _0804B9D4 @ =gUnknown_826056C - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r0, _0804B9D8 @ =gUnknown_82605CC - bl sub_800F078 + bl LoadCompressedSpritePaletteUsingHeap ldr r0, _0804B9DC @ =gUnknown_82606F4 mov r1, r9 mov r2, r10 @@ -2362,9 +2362,9 @@ sub_804BB98: @ 804BB98 lsrs r0, 24 mov r9, r0 ldr r0, _0804BC3C @ =gUnknown_826056C - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r0, _0804BC40 @ =gUnknown_82605CC - bl sub_800F078 + bl LoadCompressedSpritePaletteUsingHeap ldr r0, _0804BC44 @ =gUnknown_82606F4 adds r1, r6, 0 mov r2, r8 @@ -2790,10 +2790,10 @@ LoadBallGfx: @ 804BEF4 cmp r0, r1 bne _0804BF1C adds r0, r5, 0 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r0, _0804BF58 @ =gUnknown_82605CC adds r0, r6, r0 - bl sub_800F078 + bl LoadCompressedSpritePaletteUsingHeap _0804BF1C: cmp r4, 0x6 beq _0804BF48 diff --git a/asm/pokedex_area_markers.s b/asm/pokedex_area_markers.s index 6062b95ee..d6ea7f251 100644 --- a/asm/pokedex_area_markers.s +++ b/asm/pokedex_area_markers.s @@ -66,7 +66,7 @@ sub_8134230: @ 8134230 ands r2, r5 orrs r2, r1 str r2, [r0, 0x4] - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _081343D0 @ =gUnknown_846341C mov r3, r8 lsls r3, 4 diff --git a/asm/pokemon_jump.s b/asm/pokemon_jump.s index c00c08f20..d94a5c8db 100644 --- a/asm/pokemon_jump.s +++ b/asm/pokemon_jump.s @@ -170,7 +170,7 @@ sub_81476E0: @ 81476E0 lsls r0, 3 ldr r1, _081477B0 @ =gUnknown_846B42C adds r0, r1 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet movs r2, 0x8 ldrsh r0, [r4, r2] lsls r0, 3 diff --git a/asm/pokemon_jump_2.s b/asm/pokemon_jump_2.s index a8595db7f..3497f993e 100644 --- a/asm/pokemon_jump_2.s +++ b/asm/pokemon_jump_2.s @@ -6777,7 +6777,7 @@ sub_814AD6C: @ 814AD6C ldr r5, _0814ADAC @ =gUnknown_846E0B0 _0814AD74: adds r0, r5, 0 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet adds r5, 0x8 adds r4, 0x1 cmp r4, 0x4 @@ -6881,7 +6881,7 @@ _0814AE2A: adds r0, r1 ldr r3, [r7, 0x8] mov r1, r8 - bl sub_800ECC4 + bl HandleLoadSpecialPokePic mov r3, r8 str r3, [sp, 0x18] adds r4, r6, 0 @@ -6903,7 +6903,7 @@ _0814AE2A: ands r1, r5 orrs r1, r4 str r1, [r0, 0x4] - bl LoadCompressedObjectPalette + bl LoadCompressedSpritePalette mov r0, r8 bl Free mov r0, r10 diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s index 94d451a73..6961aea5e 100644 --- a/asm/pokemon_special_anim.s +++ b/asm/pokemon_special_anim.s @@ -2446,7 +2446,7 @@ _0811D884: adds r1, r6, 0 adds r2, r7, 0 mov r3, r10 - bl sub_800ECC4 + bl HandleLoadSpecialPokePic mov r0, r8 bl GetMonFrontSpritePal adds r1, r4, 0 @@ -3699,7 +3699,7 @@ sub_811E204: @ 811E204 sub sp, 0x8 mov r10, r0 ldr r0, _0811E2E0 @ =gUnknown_84599B8 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _0811E2E4 @ =gUnknown_84599C0 bl LoadSpritePalette movs r0, 0 @@ -4148,7 +4148,7 @@ _0811E582: sub_811E588: @ 811E588 push {lr} ldr r0, _0811E59C @ =gUnknown_84599C8 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet ldr r0, _0811E5A0 @ =gUnknown_84599D0 bl LoadSpritePalette pop {r0} @@ -4216,7 +4216,7 @@ sub_811E5B8: @ 811E5B8 str r1, [r4] mov r1, r9 strh r1, [r4, 0x4] - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet adds r0, r4, 0 bl LoadSpritePalette ldr r0, _0811E674 @ =sub_811E694 diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index a4c77e32e..5bf5a87ae 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -7233,7 +7233,7 @@ sub_808F3F8: @ 808F3F8 adds r0, r1 ldr r5, _0808F474 @ =0x000022bc adds r1, r4, r5 - bl sub_800ECC4 + bl HandleLoadSpecialPokePic ldr r1, [r6] ldr r2, _0808F478 @ =0x00000cd8 adds r0, r1, r2 @@ -20609,7 +20609,7 @@ _08095B9C: orrs r0, r1 str r0, [r2, 0x4] mov r0, r9 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet mov r4, r9 ldrh r0, [r4, 0x6] bl GetSpriteTileStartByTag diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 680004d4a..8f492120f 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -2689,7 +2689,7 @@ sub_8140C0C: @ 8140C0C ldr r4, _08140C3C @ =gUnknown_84655B0 _08140C12: adds r0, r4, 0 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet adds r4, 0x8 adds r5, 0x1 cmp r5, 0x2 diff --git a/asm/smokescreen.s b/asm/smokescreen.s index 1768a5ea4..2a350c911 100644 --- a/asm/smokescreen.s +++ b/asm/smokescreen.s @@ -26,9 +26,9 @@ sub_804A76C: @ 804A76C cmp r0, r1 bne _0804A79E adds r0, r5, 0 - bl sub_800F034 + bl LoadCompressedSpriteSheetUsingHeap ldr r0, _0804A8AC @ =gUnknown_8250994 - bl sub_800F078 + bl LoadCompressedSpritePaletteUsingHeap _0804A79E: ldr r0, _0804A8B0 @ =sub_804A8C0 bl CreateInvisibleSpriteWithCallback diff --git a/asm/title_screen.s b/asm/title_screen.s index 07a861c86..06ca468a8 100644 --- a/asm/title_screen.s +++ b/asm/title_screen.s @@ -1704,7 +1704,7 @@ sub_8079708: @ 8079708 ldr r4, _08079728 @ =gUnknown_83BFB9C _0807970E: adds r0, r4, 0 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet adds r4, 0x8 adds r5, 0x1 cmp r5, 0x3 diff --git a/asm/trade.s b/asm/trade.s index a45cedc3e..1373b84e1 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -7292,7 +7292,7 @@ _08050040: ldr r1, [r1, 0x8] adds r2, r5, 0 adds r3, r7, 0 - bl sub_800ECC4 + bl HandleLoadSpecialPokePic movs r4, 0 b _0805009A .align 2, 0 @@ -7316,7 +7316,7 @@ _0805007C: _0805009A: mov r0, r8 bl GetMonSpritePalStruct - bl LoadCompressedObjectPalette + bl LoadCompressedSpritePalette ldr r0, _080500C4 @ =gUnknown_2031DAC ldr r1, [r0] adds r0, r1, 0 @@ -10813,7 +10813,7 @@ _08052042: ldr r1, [r1] ldr r1, [r1, 0x10] ldr r3, [r3, 0x6C] - bl sub_800ECC4 + bl HandleLoadSpecialPokePic ldr r1, [r7] b _080522AC .align 2, 0 @@ -13038,7 +13038,7 @@ _0805349E: ldr r1, [r1] ldr r1, [r1, 0x10] ldr r3, [r3, 0x6C] - bl sub_800ECC4 + bl HandleLoadSpecialPokePic ldr r1, [r7] b _08053708 .align 2, 0 diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s index 6c917be27..19969116a 100644 --- a/asm/union_room_chat.s +++ b/asm/union_room_chat.s @@ -5510,7 +5510,7 @@ sub_812AE70: @ 812AE70 ldr r4, _0812AE9C @ =gUnknown_845AF58 _0812AE76: adds r0, r4, 0 - bl LoadCompressedObjectPic + bl LoadCompressedSpriteSheet adds r4, 0x8 adds r5, 0x1 cmp r5, 0x4 diff --git a/include/decompress.h b/include/decompress.h index 19b507525..03080fe48 100644 --- a/include/decompress.h +++ b/include/decompress.h @@ -10,15 +10,13 @@ extern u8 gDecompressionBuffer[0x4000]; 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); -bool8 LoadCompressedObjectPicUsingHeap(const struct CompressedSpriteSheet* src); +u16 LoadCompressedSpriteSheet(const struct CompressedSpriteSheet *src); +void LoadCompressedSpriteSheetOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer); +bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet* src); -void LoadCompressedObjectPalette(const struct CompressedSpritePalette *src); -void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer); -bool8 LoadCompressedObjectPaletteUsingHeap(const struct CompressedSpritePalette *src); - -bool8 sub_800F078(const struct CompressedSpritePalette *src); +void LoadCompressedSpritePalette(const struct CompressedSpritePalette *src); +void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer); +bool8 LoadCompressedSpritePaletteUsingHeap(const struct CompressedSpritePalette *src); void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void* buffer, s32 species); void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, void* buffer, s32 species); @@ -27,15 +25,12 @@ void DecompressPicFromTable_DontHandleDeoxys(const struct CompressedSpriteSheet void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); void HandleLoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); void HandleLoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); -void sub_800ECC4(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); +void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic); 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); -u32 sub_8034974(const u8 *ptr); - -void sub_800F034(const struct CompressedSpriteSheet *src); u32 GetDecompressedDataSize(const u8 *ptr); #endif // GUARD_DECOMPRESS_H diff --git a/ld_script.txt b/ld_script.txt index 2664d8010..8487e7265 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -64,7 +64,7 @@ SECTIONS { asm/multiboot.o(.text); asm/main_menu.o(.text); asm/battle_controllers.o(.text); - asm/decompress.o(.text); + src/decompress.o(.text); asm/battle_1.o(.text); asm/battle_2.o(.text); asm/battle_util.o(.text); diff --git a/src/daycare.c b/src/daycare.c index 206e0b383..7f64cf548 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1768,8 +1768,8 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc { u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); - sub_800ECC4(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[(a0 * 2) + 1], species, pid); - LoadCompressedObjectPalette(GetMonSpritePalStruct(mon)); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[(a0 * 2) + 1], species, pid); + LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); *speciesLoc = species; } break; diff --git a/src/decompress.c b/src/decompress.c new file mode 100644 index 000000000..ddc86b5b7 --- /dev/null +++ b/src/decompress.c @@ -0,0 +1,664 @@ +#include "global.h" +#include "malloc.h" +#include "decompress.h" +#include "pokemon.h" +#include "text.h" +#include "constants/species.h" + +extern const struct CompressedSpriteSheet gMonFrontPicTable[]; +extern const struct CompressedSpriteSheet gMonBackPicTable[]; + +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 LoadCompressedSpriteSheet(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 LoadCompressedSpriteSheetOverrideBuffer(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 LoadCompressedSpritePalette(const struct CompressedSpritePalette *src) +{ + struct SpritePalette dest; + + LZ77UnCompWram(src->data, gDecompressionBuffer); + dest.data = (void*) gDecompressionBuffer; + dest.tag = src->tag; + LoadSpritePalette(&dest); +} + +void LoadCompressedSpritePaletteOverrideBuffer(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 > NUM_SPECIES) + 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(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 > NUM_SPECIES) // is species unknown? draw the ? icon + LZ77UnCompWram(gMonFrontPicTable[0].data, dest); + else + LZ77UnCompWram(src->data, dest); + + DuplicateDeoxysTiles(dest, species); + DrawSpindaSpots(species, personality, dest, isFrontPic); +} + +static void DuplicateDeoxysTiles(void *pointer, s32 species) +{ + if (species == SPECIES_DEOXYS) + CpuCopy32(pointer + 0x800, pointer, 0x800); +} + +static void Unused_LZDecompressWramIndirect(const void **src, void *dest) +{ + LZ77UnCompWram(*src, dest); +} + +#ifdef NONMATCHING +static void sub_800EDDC(s32 a0, s32 a1, const u8 *a2, u8 *a3) +{ + u8 *v1, *v2; + int i, j, k, l; + + if (a0 & 1) + { + u8 v40 = ((a0 >> 1) + 4); + for (i = 0; i < a1; ++i) + { + // this nested loop failed to match + for (j = 0; j < 8 - a0; ++j) + { + for (k = 0; k < 8; ++k) + { + + v1 = a3 + 0x100 * v40 + 0x100 * (j >> 1) + 0x20 * k; + v2 = a3 + 0x20 * k + 0x100 * (j >> 1); + for (l = 0; l < 0x10; ++l) + { + if (!(j & 1)) + { + v2[0] = j & 1; + v1[16] = 0; +// a3[0x100 * (j / 2) + 0x20 * k + l] = 0; +// a3[0x100 * v40 + 0x100 * (j / 2) + 0x20 * k + l + 0x10] = 0; + } + else + { + v2[16] = 0; + v1[0x100] = 0; +// a3[0x100 * (j / 2) + 0x20 * k + l + 0x10] = 0; +// a3[0x100 * v40 + 0x100 * (j / 2) + 0x20 * k + l + 0x100] = 0; + } + ++v1; + ++v2; // this should be generated if you write stuff inside operator [] instead of declaring v1/v2 + } + } + } + for (j = 0; j < 2; ++j) + { + for (k = 0; k < 8; ++k) + { + for (l = 0; l < 0x20; ++l) + { + a3[0x100 * k + 0x20 * j + l] = 0; + a3[0x100 * k + 0xC0 + 0x20 * j + l] = 0; + } + } + } + if (a0 == 5) + a3 += 0x120; + for (j = 0; j < a0; ++j) + { + for (k = 0; k < a0; ++k) + { + for (l = 0; l < 4; ++l) + { + a3[0x12 + 4 * l] = a2[0 + 4 * l]; + a3[0x13 + 4 * l] = a2[1 + 4 * l]; + a3[0x12 + 0x1E + 4 * l] = a2[2 + 4 * l]; + a3[0x12 + 0x1F + 4 * l] = a2[3 + 4 * l]; + a3[0x102 + 4 * l] = a2[0x10 + 4 * l]; + a3[0x103 + 4 * l] = a2[0x11 + 4 * l]; + a3[0x120 + 4 * l] = a2[0x12 + 4 * l]; + a3[0x121 + 4 * l] = a2[0x13 + 4 * l]; + } + a2 += 0x20; + a3 += 0x20; + } + if (a0 == 7) + a3 += 0x20; + else if (a0 == 5) + a3 += 0x60; + } + if (a0 == 7) + a3 += 0x100; + else if (a0 == 5) + a3 += 0x1E0; + } + } + else + { + for (i = 0; i < a1; ++i) + { + if (a0 == 6) + for (j = 0; j < 0x100; ++j) + *a3++ = 0; + for (j = 0; j < a0; ++j) + { + if (a0 == 6) + for (k = 0; k < 0x20; ++k) + *a3++ = 0; + for (k = 0; k < 0x20 * a0; ++k) + *a3++ = *a2++; + if (a0 == 6) + for (k = 0; k < 0x20; ++k) + *a3++ = 0; + } + if (a0 == 6) + for (j = 0; j < 0x100; ++j) + *a3++ = 0; + } + } +} +#else +NAKED +static void sub_800EDDC(s32 a0, s32 a1, const u8 *a2, u8 *a3) +{ + asm_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 _0800EDFC\n\ + b _0800EF94\n\ + _0800EDFC:\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 _0800EE10\n\ + b _0800F024\n\ + _0800EE10:\n\ + movs r4, 0x8\n\ + subs r1, r4, r1\n\ + str r1, [sp, 0x10]\n\ + _0800EE16:\n\ + movs r7, 0\n\ + adds r0, 0x1\n\ + str r0, [sp, 0x14]\n\ + ldr r0, [sp, 0x10]\n\ + cmp r7, r0\n\ + bge _0800EE92\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\ + _0800EE34:\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\ + _0800EE46:\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\ + _0800EE58:\n\ + ldr r4, [sp, 0x20]\n\ + cmp r4, 0\n\ + bne _0800EE68\n\ + strb r4, [r1]\n\ + add r4, sp, 0x20\n\ + ldrb r4, [r4]\n\ + strb r4, [r2, 0x10]\n\ + b _0800EE76\n\ + _0800EE68:\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\ + _0800EE76:\n\ + adds r2, 0x1\n\ + adds r1, 0x1\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _0800EE58\n\ + movs r0, 0x20\n\ + add r12, r0\n\ + adds r3, 0x1\n\ + cmp r3, 0x7\n\ + ble _0800EE46\n\ + adds r7, 0x1\n\ + ldr r1, [sp, 0xC]\n\ + cmp r7, r1\n\ + blt _0800EE34\n\ + _0800EE92:\n\ + movs r7, 0\n\ + movs r2, 0\n\ + _0800EE96:\n\ + movs r6, 0\n\ + adds r4, r7, 0x1\n\ + mov r8, r4\n\ + lsls r4, r7, 5\n\ + _0800EE9E:\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\ + _0800EEB2:\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 _0800EEB2\n\ + mov r6, r10\n\ + cmp r6, 0x7\n\ + ble _0800EE9E\n\ + mov r7, r8\n\ + cmp r7, 0x1\n\ + ble _0800EE96\n\ + mov r1, r9\n\ + cmp r1, 0x5\n\ + bne _0800EED8\n\ + movs r2, 0x90\n\ + lsls r2, 1\n\ + adds r5, r2\n\ + _0800EED8:\n\ + movs r7, 0\n\ + cmp r7, r9\n\ + bge _0800EF6E\n\ + _0800EEDE:\n\ + movs r3, 0\n\ + adds r7, 0x1\n\ + mov r8, r7\n\ + cmp r3, r9\n\ + bge _0800EF4E\n\ + _0800EEE8:\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\ + _0800EF00:\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, _0800EF58 @ =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, _0800EF5C @ =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 _0800EF00\n\ + str r4, [sp, 0x4]\n\ + adds r5, r7, 0\n\ + mov r3, r10\n\ + cmp r3, r9\n\ + blt _0800EEE8\n\ + _0800EF4E:\n\ + mov r2, r9\n\ + cmp r2, 0x7\n\ + bne _0800EF60\n\ + adds r5, 0x20\n\ + b _0800EF68\n\ + .align 2, 0\n\ + _0800EF58: .4byte 0x00000103\n\ + _0800EF5C: .4byte 0x00000121\n\ + _0800EF60:\n\ + mov r4, r9\n\ + cmp r4, 0x5\n\ + bne _0800EF68\n\ + adds r5, 0x60\n\ + _0800EF68:\n\ + mov r7, r8\n\ + cmp r7, r9\n\ + blt _0800EEDE\n\ + _0800EF6E:\n\ + mov r0, r9\n\ + cmp r0, 0x7\n\ + bne _0800EF7C\n\ + movs r1, 0x80\n\ + lsls r1, 1\n\ + adds r5, r1\n\ + b _0800EF88\n\ + _0800EF7C:\n\ + mov r2, r9\n\ + cmp r2, 0x5\n\ + bne _0800EF88\n\ + movs r4, 0xF0\n\ + lsls r4, 1\n\ + adds r5, r4\n\ + _0800EF88:\n\ + ldr r0, [sp, 0x14]\n\ + ldr r1, [sp]\n\ + cmp r0, r1\n\ + bge _0800EF92\n\ + b _0800EE16\n\ + _0800EF92:\n\ + b _0800F024\n\ + _0800EF94:\n\ + movs r6, 0\n\ + ldr r2, [sp]\n\ + cmp r6, r2\n\ + bge _0800F024\n\ + _0800EF9C:\n\ + adds r6, 0x1\n\ + mov r10, r6\n\ + mov r4, r9\n\ + cmp r4, 0x6\n\ + bne _0800EFB4\n\ + movs r0, 0\n\ + movs r3, 0xFF\n\ + _0800EFAA:\n\ + strb r0, [r5]\n\ + adds r5, 0x1\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _0800EFAA\n\ + _0800EFB4:\n\ + movs r7, 0\n\ + cmp r7, r9\n\ + bge _0800F008\n\ + _0800EFBA:\n\ + adds r7, 0x1\n\ + mov r8, r7\n\ + mov r1, r9\n\ + lsls r0, r1, 5\n\ + cmp r1, 0x6\n\ + bne _0800EFD4\n\ + movs r1, 0\n\ + movs r3, 0x1F\n\ + _0800EFCA:\n\ + strb r1, [r5]\n\ + adds r5, 0x1\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _0800EFCA\n\ + _0800EFD4:\n\ + adds r1, r0, 0\n\ + cmp r1, 0\n\ + ble _0800EFEE\n\ + adds r3, r1, 0\n\ + _0800EFDC:\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 _0800EFDC\n\ + _0800EFEE:\n\ + mov r4, r9\n\ + cmp r4, 0x6\n\ + bne _0800F002\n\ + movs r0, 0\n\ + movs r3, 0x1F\n\ + _0800EFF8:\n\ + strb r0, [r5]\n\ + adds r5, 0x1\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _0800EFF8\n\ + _0800F002:\n\ + mov r7, r8\n\ + cmp r7, r9\n\ + blt _0800EFBA\n\ + _0800F008:\n\ + mov r0, r9\n\ + cmp r0, 0x6\n\ + bne _0800F01C\n\ + movs r0, 0\n\ + movs r3, 0xFF\n\ + _0800F012:\n\ + strb r0, [r5]\n\ + adds r5, 0x1\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _0800F012\n\ + _0800F01C:\n\ + mov r6, r10\n\ + ldr r1, [sp]\n\ + cmp r6, r1\n\ + blt _0800EF9C\n\ + _0800F024:\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\ + "); +} +#endif + +bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet* src) +{ + struct SpriteSheet dest; + void* buffer; + + buffer = AllocZeroed(*((u32*)(&src->data[0])) >> 8); + if (!buffer) + return TRUE; + LZ77UnCompWram(src->data, buffer); + dest.data = buffer; + dest.size = src->size; + dest.tag = src->tag; + LoadSpriteSheet(&dest); + Free(buffer); + return FALSE; +} + +bool8 LoadCompressedSpritePaletteUsingHeap(const struct CompressedSpritePalette *src) +{ + struct SpritePalette dest; + void* buffer; + + buffer = AllocZeroed(*((u32*)(&src->data[0])) >> 8); + if (!buffer) + return TRUE; + LZ77UnCompWram(src->data, buffer); + dest.data = buffer; + dest.tag = src->tag; + LoadSpritePalette(&dest); + Free(buffer); + return FALSE; +} + +u32 GetDecompressedDataSize(const u8 *ptr) +{ + u32 ptr32[1]; + u8 *ptr8 = (u8 *)ptr32; + + ptr8[0] = ptr[1]; + ptr8[1] = ptr[2]; + ptr8[2] = ptr[3]; + ptr8[3] = 0; + return ptr32[0]; +} + +void DecompressPicFromTable_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void* buffer, s32 species) +{ + if (species > NUM_SPECIES) + LZ77UnCompWram(gMonFrontPicTable[0].data, buffer); + else + LZ77UnCompWram(src->data, buffer); +} + +void HandleLoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality) +{ + 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) +{ + 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 > NUM_SPECIES) // is species unknown? draw the ? icon + { + LZ77UnCompWram(gMonFrontPicTable[0].data, dest); + } + else + { + LZ77UnCompWram(src->data, dest); + } + DrawSpindaSpots(species, personality, dest, isFrontPic); +} diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 5e27a6482..f8d1044f6 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -437,8 +437,8 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc { u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); - sub_800ECC4(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[(a0 * 2) + 1], species, pid); - LoadCompressedObjectPalette(GetMonSpritePalStruct(mon)); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[(a0 * 2) + 1], species, pid); + LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); *speciesLoc = species; } break; diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c index a244a1075..0c2c60437 100644 --- a/src/item_menu_icons.c +++ b/src/item_menu_icons.c @@ -683,7 +683,7 @@ u8 AddItemIconObject(u16 tilesTag, u16 paletteTag, u16 itemId) spritePalette.data = sub_8098974(itemId, 1); spritePalette.tag = paletteTag; - LoadCompressedObjectPalette(&spritePalette); + LoadCompressedSpritePalette(&spritePalette); CpuCopy16(&gUnknown_83D427C, &template, sizeof(struct SpriteTemplate)); template.tileTag = tilesTag; @@ -714,7 +714,7 @@ u8 AddItemIconObjectWithCustomObjectTemplate(const struct SpriteTemplate * origT spritePalette.data = sub_8098974(itemId, 1); spritePalette.tag = paletteTag; - LoadCompressedObjectPalette(&spritePalette); + LoadCompressedSpritePalette(&spritePalette); CpuCopy16(origTemplate, &template, sizeof(struct SpriteTemplate)); template.tileTag = tilesTag; diff --git a/src/item_pc.c b/src/item_pc.c index afc82a73f..1df6bcc9d 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -452,11 +452,11 @@ static bool8 ItemPc_LoadGraphics(void) sStateDataPtr->data[0]++; break; case 3: - LoadCompressedObjectPic(&gBagSwapSpriteSheet); + LoadCompressedSpriteSheet(&gBagSwapSpriteSheet); sStateDataPtr->data[0]++; break; default: - LoadCompressedObjectPalette(&gBagSwapSpritePalette); + LoadCompressedSpritePalette(&gBagSwapSpritePalette); sStateDataPtr->data[0] = 0; return TRUE; } diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 034a07679..6534a8dc1 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -402,7 +402,7 @@ void sub_8146060(void) } if (gUnknown_203F3C8->unk_0000.unk_09 != 0 && gUnknown_203F3C8->unk_0000.unk_08_0 == 1) { - sub_800F034(&gUnknown_8467F58); + LoadCompressedSpriteSheetUsingHeap(&gUnknown_8467F58); LoadSpritePalette(&gUnknown_8467F60[gUnknown_203F3C8->unk_0170->textPal4]); for (; r7 < gUnknown_203F3C8->unk_0000.unk_09; r7++) { diff --git a/src/oak_speech.c b/src/oak_speech.c index 3bf174778..d6939d4e1 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -1613,7 +1613,7 @@ static void CreateNidoranFSprite(u8 taskId) u8 spriteId; DecompressPicFromTable(gUnknown_8235194, sub_8044E00(0), SPECIES_NIDORAN_F); - sub_800F078(&gUnknown_82373F4); + LoadCompressedSpritePaletteUsingHeap(&gUnknown_82373F4); SetMultiuseSpriteTemplateToPokemon(SPECIES_NIDORAN_F, 0); spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x60, 0x60, 1); gSprites[spriteId].callback = SpriteCallbackDummy; @@ -1635,9 +1635,9 @@ static void CreatePikaOrGrassPlatformSpriteAndLinkToCurrentTask(u8 taskId, u8 st switch (state) { case 0: - LoadCompressedObjectPic(&sOakSpeech_PikaSpriteSheets[0]); - LoadCompressedObjectPic(&sOakSpeech_PikaSpriteSheets[1]); - LoadCompressedObjectPic(&sOakSpeech_PikaSpriteSheets[2]); + LoadCompressedSpriteSheet(&sOakSpeech_PikaSpriteSheets[0]); + LoadCompressedSpriteSheet(&sOakSpeech_PikaSpriteSheets[1]); + LoadCompressedSpriteSheet(&sOakSpeech_PikaSpriteSheets[2]); LoadSpritePalette(&sOakSpeech_PikaSpritePal); spriteId = CreateSprite(&sOakSpeech_PikaSpriteTemplates[0], 0x10, 0x11, 2); gSprites[spriteId].oam.priority = 0; @@ -1654,7 +1654,7 @@ static void CreatePikaOrGrassPlatformSpriteAndLinkToCurrentTask(u8 taskId, u8 st gTasks[taskId].data[9] = spriteId; break; case 1: - LoadCompressedObjectPic(&sOakSpeech_GrassPlatformSpriteSheet); + LoadCompressedSpriteSheet(&sOakSpeech_GrassPlatformSpriteSheet); LoadSpritePalette(&sOakSpeech_GrassPlatformSpritePal); for (i = 0; i < 3; i++) { diff --git a/src/tm_case.c b/src/tm_case.c index 7c26c1c58..f32273add 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -469,7 +469,7 @@ static bool8 HandleLoadTMCaseGraphicsAndPalettes(void) sTMCaseDynamicResources->seqId++; break; case 4: - LoadCompressedObjectPic(&sTMSpriteSheet); + LoadCompressedSpriteSheet(&sTMSpriteSheet); sTMCaseDynamicResources->seqId++; break; default: diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index ecd889d80..25a8d4515 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -109,7 +109,7 @@ void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 palett else { sCreatingSpriteTemplate.paletteTag = paletteTag; - LoadCompressedObjectPalette(GetMonSpritePalStructFromOtIdPersonality(species, otId, personality)); + LoadCompressedSpritePalette(GetMonSpritePalStructFromOtIdPersonality(species, otId, personality)); } } else @@ -122,7 +122,7 @@ void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 palett else { sCreatingSpriteTemplate.paletteTag = paletteTag; - LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[species]); + LoadCompressedSpritePalette(&gTrainerFrontPicPaletteTable[species]); } } } diff --git a/src/unk_815C980.c b/src/unk_815C980.c index b90d2fb03..09b92c834 100644 --- a/src/unk_815C980.c +++ b/src/unk_815C980.c @@ -128,7 +128,7 @@ bool32 sub_815CA40(u32 id, s32 arg1, const struct UnkStruct3 *arg2) compObjectPic = *(struct CompressedSpriteSheet*)(arg2->spriteSheet); compObjectPic.size = GetDecompressedDataSize(arg2->spriteSheet->data); - gUnknown_203F454->array[id].tileStart = LoadCompressedObjectPic(&compObjectPic); + gUnknown_203F454->array[id].tileStart = LoadCompressedSpriteSheet(&compObjectPic); } if (gUnknown_203F454->array[id].tileStart == 0xFFFF) diff --git a/src/unk_815F138.c b/src/unk_815F138.c index 8941f1559..96005a07b 100644 --- a/src/unk_815F138.c +++ b/src/unk_815F138.c @@ -209,7 +209,7 @@ void sub_815F564(u16 tilesTag, u16 palTag) struct SpritePalette spritePalette = {gUnknown_847A328}; spriteSheet.tag = tilesTag; spritePalette.tag = palTag; - LoadCompressedObjectPic(&spriteSheet); + LoadCompressedSpriteSheet(&spriteSheet); LoadSpritePalette(&spritePalette); } -- cgit v1.2.3 From c27f8d2d9ee63deaf9de9f7c3689e072400ab5c3 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 28 Jun 2019 01:59:40 +0800 Subject: resolve conflict --- asm/egg_hatch.s | 8 - src/egg_hatch.c | 878 -------------------------------------------------------- 2 files changed, 886 deletions(-) delete mode 100644 asm/egg_hatch.s delete mode 100644 src/egg_hatch.c diff --git a/asm/egg_hatch.s b/asm/egg_hatch.s deleted file mode 100644 index 2428f2984..000000000 --- a/asm/egg_hatch.s +++ /dev/null @@ -1,8 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - .align 2, 0 @ Don't pad with nop. diff --git a/src/egg_hatch.c b/src/egg_hatch.c deleted file mode 100644 index f8d1044f6..000000000 --- a/src/egg_hatch.c +++ /dev/null @@ -1,878 +0,0 @@ -#include "global.h" -#include "pokemon.h" -#include "egg_hatch.h" -#include "pokedex.h" -#include "constants/items.h" -#include "script.h" -#include "decompress.h" -#include "task.h" -#include "palette.h" -#include "main.h" -#include "event_data.h" -#include "sound.h" -#include "constants/songs.h" -#include "text.h" -#include "text_window.h" -#include "string_util.h" -#include "menu.h" -#include "trig.h" -#include "random.h" -#include "malloc.h" -#include "dma3.h" -#include "gpu_regs.h" -#include "bg.h" -#include "m4a.h" -#include "window.h" -#include "graphics.h" -#include "constants/abilities.h" -#include "constants/species.h" -#include "daycare.h" -#include "overworld.h" -#include "scanline_effect.h" -#include "field_weather.h" -#include "international_string_util.h" -#include "naming_screen.h" -#include "pokemon_storage_system.h" -#include "field_screen_effect.h" -#include "battle.h" // to get rid of later -#include "help_system.h" -#include "field_fadetransition.h" -#include "new_menu_helpers.h" - -struct EggHatchData -{ - u8 eggSpriteID; - u8 pokeSpriteID; - u8 CB2_state; - u8 CB2_PalCounter; - u8 eggPartyID; - u8 unused_5; - u8 unused_6; - u8 eggShardVelocityID; - u8 windowId; - u8 unused_9; - u8 unused_A; - u16 species; - struct TextColor textColor; -}; - -extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle -extern const u8 gText_HatchedFromEgg[]; -extern const u8 gText_NickHatchPrompt[]; - -static void Task_EggHatch(u8 taskID); -static void CB2_EggHatch_0(void); -static void CB2_EggHatch_1(void); -static void SpriteCB_Egg_0(struct Sprite* sprite); -static void SpriteCB_Egg_1(struct Sprite* sprite); -static void SpriteCB_Egg_2(struct Sprite* sprite); -static void SpriteCB_Egg_3(struct Sprite* sprite); -static void SpriteCB_Egg_4(struct Sprite* sprite); -static void SpriteCB_Egg_5(struct Sprite* sprite); -static void SpriteCB_EggShard(struct Sprite* sprite); -static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed); -static void CreateRandomEggShardSprite(void); -static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex); - -// IWRAM bss -static IWRAM_DATA struct EggHatchData *sEggHatchData; - -// rom data -static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/normal.gbapal"); -static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/misc/egg_hatch.4bpp"); -static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp"); - -static const struct OamData sOamData_EggHatch = - { - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, - }; - -static const union AnimCmd sSpriteAnim_EggHatch0[] = - { - ANIMCMD_FRAME(0, 5), - ANIMCMD_END - }; - -static const union AnimCmd sSpriteAnim_EggHatch1[] = - { - ANIMCMD_FRAME(16, 5), - ANIMCMD_END - }; - -static const union AnimCmd sSpriteAnim_EggHatch2[] = - { - ANIMCMD_FRAME(32, 5), - ANIMCMD_END - }; - -static const union AnimCmd sSpriteAnim_EggHatch3[] = - { - ANIMCMD_FRAME(48, 5), - ANIMCMD_END - }; - -static const union AnimCmd *const sSpriteAnimTable_EggHatch[] = - { - sSpriteAnim_EggHatch0, - sSpriteAnim_EggHatch1, - sSpriteAnim_EggHatch2, - sSpriteAnim_EggHatch3, - }; - -static const struct SpriteSheet sEggHatch_Sheet = - { - .data = sEggHatchTiles, - .size = 2048, - .tag = 12345, - }; - -static const struct SpriteSheet sEggShards_Sheet = - { - .data = sEggShardTiles, - .size = 128, - .tag = 23456, - }; - -static const struct SpritePalette sEgg_SpritePalette = - { - .data = sEggPalette, - .tag = 54321 - }; - -static const struct SpriteTemplate sSpriteTemplate_EggHatch = - { - .tileTag = 12345, - .paletteTag = 54321, - .oam = &sOamData_EggHatch, - .anims = sSpriteAnimTable_EggHatch, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy - }; - -static const struct OamData sOamData_EggShard = - { - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = SPRITE_SHAPE(8x8), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(8x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, - }; - -static const union AnimCmd sSpriteAnim_EggShard0[] = - { - ANIMCMD_FRAME(0, 5), - ANIMCMD_END - }; - -static const union AnimCmd sSpriteAnim_EggShard1[] = - { - ANIMCMD_FRAME(1, 5), - ANIMCMD_END - }; - -static const union AnimCmd sSpriteAnim_EggShard2[] = - { - ANIMCMD_FRAME(2, 5), - ANIMCMD_END - }; - -static const union AnimCmd sSpriteAnim_EggShard3[] = - { - ANIMCMD_FRAME(3, 5), - ANIMCMD_END - }; - -static const union AnimCmd *const sSpriteAnimTable_EggShard[] = - { - sSpriteAnim_EggShard0, - sSpriteAnim_EggShard1, - sSpriteAnim_EggShard2, - sSpriteAnim_EggShard3, - }; - -static const struct SpriteTemplate sSpriteTemplate_EggShard = - { - .tileTag = 23456, - .paletteTag = 54321, - .oam = &sOamData_EggShard, - .anims = sSpriteAnimTable_EggShard, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_EggShard - }; - -static const struct BgTemplate sBgTemplates_EggHatch[2] = - { - { - .bg = 0, - .charBaseIndex = 2, - .mapBaseIndex = 24, - .screenSize = 3, - .paletteMode = 0, - .priority = 0, - .baseTile = 0 - }, - - { - .bg = 1, - .charBaseIndex = 0, - .mapBaseIndex = 8, - .screenSize = 1, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 - }, - }; - -static const struct WindowTemplate sWinTemplates_EggHatch[2] = - { - { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 15, - .width = 26, - .height = 4, - .paletteNum = 0, - .baseBlock = 64 - }, - DUMMY_WIN_TEMPLATE - }; - -static const struct WindowTemplate sYesNoWinTemplate = - { - .bg = 0, - .tilemapLeft = 21, - .tilemapTop = 9, - .width = 5, - .height = 4, - .paletteNum = 15, - .baseBlock = 424 - }; - -static const s16 sEggShardVelocities[][2] = - { - {Q_8_8(-1.5), Q_8_8(-3.75)}, - {Q_8_8(-5), Q_8_8(-3)}, - {Q_8_8(3.5), Q_8_8(-3)}, - {Q_8_8(-4), Q_8_8(-3.75)}, - {Q_8_8(2), Q_8_8(-1.5)}, - {Q_8_8(-0.5), Q_8_8(-6.75)}, - {Q_8_8(5), Q_8_8(-2.25)}, - {Q_8_8(-1.5), Q_8_8(-3.75)}, - {Q_8_8(4.5), Q_8_8(-1.5)}, - {Q_8_8(-1), Q_8_8(-6.75)}, - {Q_8_8(4), Q_8_8(-2.25)}, - {Q_8_8(-3.5), Q_8_8(-3.75)}, - {Q_8_8(1), Q_8_8(-1.5)}, - {Q_8_8(-3.515625), Q_8_8(-6.75)}, - {Q_8_8(4.5), Q_8_8(-2.25)}, - {Q_8_8(-0.5), Q_8_8(-7.5)}, - {Q_8_8(1), Q_8_8(-4.5)}, - {Q_8_8(-2.5), Q_8_8(-2.25)}, - {Q_8_8(2.5), Q_8_8(-7.5)}, - }; - -// code - -static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) -{ - u16 species; - u32 personality, pokerus; - u8 i, friendship, language, gameMet, markings, obedience; - u16 moves[4]; - u32 ivs[NUM_STATS]; - - - species = GetMonData(egg, MON_DATA_SPECIES); - - for (i = 0; i < 4; i++) - { - moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i); - } - - personality = GetMonData(egg, MON_DATA_PERSONALITY); - - for (i = 0; i < NUM_STATS; i++) - { - ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i); - } - -// language = GetMonData(egg, MON_DATA_LANGUAGE); - gameMet = GetMonData(egg, MON_DATA_MET_GAME); - markings = GetMonData(egg, MON_DATA_MARKINGS); - pokerus = GetMonData(egg, MON_DATA_POKERUS); - obedience = GetMonData(egg, MON_DATA_OBEDIENCE); - - CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, 0, 0); - - for (i = 0; i < 4; i++) - { - SetMonData(temp, MON_DATA_MOVE1 + i, &moves[i]); - } - - for (i = 0; i < NUM_STATS; i++) - { - SetMonData(temp, MON_DATA_HP_IV + i, &ivs[i]); - } - - language = GAME_LANGUAGE; - SetMonData(temp, MON_DATA_LANGUAGE, &language); - SetMonData(temp, MON_DATA_MET_GAME, &gameMet); - SetMonData(temp, MON_DATA_MARKINGS, &markings); - - friendship = 120; - SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); - SetMonData(temp, MON_DATA_POKERUS, &pokerus); - SetMonData(temp, MON_DATA_OBEDIENCE, &obedience); - - *egg = *temp; -} - -static void AddHatchedMonToParty(u8 id) -{ - u8 isEgg = 0x46; // ? - u16 pokeNum; - u8 name[12]; - u16 ball; - u16 caughtLvl; - u8 mapNameID; - struct Pokemon* mon = &gPlayerParty[id]; - - CreatedHatchedMon(mon, &gEnemyParty[0]); - SetMonData(mon, MON_DATA_IS_EGG, &isEgg); - - pokeNum = GetMonData(mon, MON_DATA_SPECIES); - GetSpeciesName(name, pokeNum); - SetMonData(mon, MON_DATA_NICKNAME, name); - - pokeNum = SpeciesToNationalPokedexNum(pokeNum); - GetSetPokedexFlag(pokeNum, FLAG_SET_SEEN); - GetSetPokedexFlag(pokeNum, FLAG_SET_CAUGHT); - - GetMonNick(mon, gStringVar1); - - ball = ITEM_POKE_BALL; - SetMonData(mon, MON_DATA_POKEBALL, &ball); - - caughtLvl = 0; - SetMonData(mon, MON_DATA_MET_LEVEL, &caughtLvl); - - mapNameID = GetCurrentRegionMapSectionId(); - SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID); - - MonRestorePP(mon); - CalculateMonStats(mon); -} - -void ScriptHatchMon(void) -{ - AddHatchedMonToParty(gSpecialVar_0x8004); -} - -static bool8 sub_8046E34(struct DayCare *daycare, u8 daycareId) -{ - u8 nick[0x20]; - struct DaycareMon *daycareMon = &daycare->mons[daycareId]; - - GetBoxMonNick(&daycareMon->mon, nick); - if (daycareMon->mail.message.itemId != 0 - && (StringCompare(nick, daycareMon->mail.monName) != 0 - || StringCompare(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0)) - { - StringCopy(gStringVar1, nick); - StringCopy(gStringVar2, daycareMon->mail.OT_name); - StringCopy(gStringVar3, daycareMon->mail.monName); - return TRUE; - } - return FALSE; -} - -bool8 sub_8046EAC(void) -{ - return sub_8046E34(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004); -} - -extern const struct CompressedSpriteSheet gMonFrontPicTable[]; - -static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc) -{ - u8 r4 = 0; - u8 spriteID = 0; // r7 - struct Pokemon* mon = NULL; // r5 - - if (a0 == 0) - { - mon = &gPlayerParty[pokeID]; - r4 = 1; - } - if (a0 == 1) - { - mon = &gPlayerParty[pokeID]; - r4 = 3; - } - switch (switchID) - { - case 0: - { - u16 species = GetMonData(mon, MON_DATA_SPECIES); - u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[(a0 * 2) + 1], species, pid); - LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); - *speciesLoc = species; - } - break; - case 1: - SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, r4); - spriteID = CreateSprite(&gMultiuseSpriteTemplate, 120, 70, 6); - gSprites[spriteID].invisible = TRUE; - gSprites[spriteID].callback = SpriteCallbackDummy; - break; - } - return spriteID; -} - -static void VBlankCB_EggHatch(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void EggHatch(void) -{ - ScriptContext2_Enable(); - CreateTask(Task_EggHatch, 10); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - sub_812B478(); -} - -static void Task_EggHatch(u8 taskID) -{ - if (!gPaletteFade.active) - { - CleanupOverworldWindowsAndTilemaps(); - SetMainCallback2(CB2_EggHatch_0); - gFieldCallback = FieldCallback_ReturnToEventScript2; - DestroyTask(taskID); - } -} - -static void CB2_EggHatch_0(void) -{ - switch (gMain.state) - { - case 0: - SetGpuReg(REG_OFFSET_DISPCNT, 0); - - sEggHatchData = Alloc(sizeof(struct EggHatchData)); - AllocateMonSpritesGfx(); - sEggHatchData->eggPartyID = gSpecialVar_0x8004; - sEggHatchData->eggShardVelocityID = 0; - - SetVBlankCallback(VBlankCB_EggHatch); - gSpecialVar_0x8005 = GetCurrentMapMusic(); - - reset_temp_tile_data_buffers(); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sBgTemplates_EggHatch, ARRAY_COUNT(sBgTemplates_EggHatch)); - - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - - SetBgAttribute(1, 7, 2); - SetBgTilemapBuffer(1, Alloc(0x1000)); - SetBgTilemapBuffer(0, Alloc(0x2000)); - - DeactivateAllTextPrinters(); - ResetPaletteFade(); - FreeAllSpritePalettes(); - ResetSpriteData(); - ResetTasks(); - ScanlineEffect_Stop(); - m4aSoundVSyncOn(); - gMain.state++; - break; - case 1: - InitWindows(sWinTemplates_EggHatch); - sEggHatchData->windowId = 0; - gMain.state++; - break; - case 2: - DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); - CopyToBgTilemapBuffer(0, gFile_graphics_interface_menu_map_tilemap, 0, 0); - LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20); - gMain.state++; - break; - case 3: - LoadSpriteSheet(&sEggHatch_Sheet); - LoadSpriteSheet(&sEggShards_Sheet); - LoadSpritePalette(&sEgg_SpritePalette); - gMain.state++; - break; - case 4: - CopyBgTilemapBufferToVram(0); - AddHatchedMonToParty(sEggHatchData->eggPartyID); - gMain.state++; - break; - case 5: - EggHatchCreateMonSprite(0, 0, sEggHatchData->eggPartyID, &sEggHatchData->species); - gMain.state++; - break; - case 6: - sEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, sEggHatchData->eggPartyID, &sEggHatchData->species); - gMain.state++; - break; - case 7: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); - LoadPalette(gTradeGba2_Pal, 0x10, 0xA0); - LoadBgTiles(1, gTradeGba_Gfx, 0x1420, 0); - CopyToBgTilemapBuffer(1, gUnknown_08331F60, 0x1000, 0); - CopyBgTilemapBufferToVram(1); - gMain.state++; - break; - case 8: - SetMainCallback2(CB2_EggHatch_1); - sEggHatchData->CB2_state = 0; - break; - } - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void EggHatchSetMonNickname(void) -{ - SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3); - FreeMonSpritesGfx(); - Free(sEggHatchData); - sub_812B484(); - SetMainCallback2(CB2_ReturnToField); -} - -static void Task_EggHatchPlayBGM(u8 taskID) -{ - if (gTasks[taskID].data[0] == 0) - { - StopMapMusic(); - } - if (gTasks[taskID].data[0] == 1) - PlayBGM(MUS_ME_SHINKA); - if (gTasks[taskID].data[0] > 60) - { - PlayBGM(MUS_SHINKA); - DestroyTask(taskID); - // UB: task is destroyed, yet the value is incremented - } - gTasks[taskID].data[0]++; -} - -static void CB2_EggHatch_1(void) -{ - u16 species; - u8 gender; - u32 personality; - - switch (sEggHatchData->CB2_state) - { - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); - sEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_EggHatch, 120, 75, 5); - ShowBg(0); - ShowBg(1); - sEggHatchData->CB2_state++; - CreateTask(Task_EggHatchPlayBGM, 5); - break; - case 1: - if (!gPaletteFade.active) - { - FillWindowPixelBuffer(sEggHatchData->windowId, 0x00); - sEggHatchData->CB2_PalCounter = 0; - sEggHatchData->CB2_state++; - } - break; - case 2: - if (++sEggHatchData->CB2_PalCounter > 30) - { - sEggHatchData->CB2_state++; - gSprites[sEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0; - } - break; - case 3: - if (gSprites[sEggHatchData->eggSpriteID].callback == SpriteCallbackDummy) - { - PlayCry1(sEggHatchData->species, 0); - sEggHatchData->CB2_state++; - } - break; - case 4: - if (IsCryFinished()) - { - sEggHatchData->CB2_state++; - } - break; - case 5: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); - StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg); - EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF); - PlayFanfare(MUS_FANFA5); - sEggHatchData->CB2_state++; - PutWindowTilemap(sEggHatchData->windowId); - CopyWindowToVram(sEggHatchData->windowId, 3); - break; - case 6: - if (IsFanfareTaskInactive()) - sEggHatchData->CB2_state++; - break; - case 7: - if (IsFanfareTaskInactive()) - sEggHatchData->CB2_state++; - break; - case 8: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); - StringExpandPlaceholders(gStringVar4, gText_NickHatchPrompt); - EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 2, 1); - sEggHatchData->CB2_state++; - break; - case 9: - if (!IsTextPrinterActive(sEggHatchData->windowId)) - { - LoadUserWindowBorderGfx(sEggHatchData->windowId, 0x140, 0xE0); - CreateYesNoMenu(&sYesNoWinTemplate, 3, 0, 2, 0x140, 0xE, 0); - sEggHatchData->CB2_state++; - } - break; - case 10: - switch (Menu_ProcessInputNoWrapClearOnChoose()) - { - case 0: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3); - species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); - gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]); - personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0); - DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname); - break; - case 1: - case -1: - sEggHatchData->CB2_state++; - } - break; - case 11: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - sEggHatchData->CB2_state++; - break; - case 12: - if (!gPaletteFade.active) - { - RemoveWindow(sEggHatchData->windowId); - UnsetBgTilemapBuffer(0); - UnsetBgTilemapBuffer(1); - Free(sEggHatchData); - SetMainCallback2(CB2_ReturnToField); - sub_812B484(); - } - break; - } - - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void SpriteCB_Egg_0(struct Sprite* sprite) -{ - if (++sprite->data[0] > 20) - { - sprite->callback = SpriteCB_Egg_1; - sprite->data[0] = 0; - } - else - { - sprite->data[1] = (sprite->data[1] + 20) & 0xFF; - sprite->pos2.x = Sin(sprite->data[1], 1); - if (sprite->data[0] == 15) - { - PlaySE(SE_BOWA); - StartSpriteAnim(sprite, 1); - CreateRandomEggShardSprite(); - } - } -} - -static void SpriteCB_Egg_1(struct Sprite* sprite) -{ - if (++sprite->data[2] > 30) - { - if (++sprite->data[0] > 20) - { - sprite->callback = SpriteCB_Egg_2; - sprite->data[0] = 0; - sprite->data[2] = 0; - } - else - { - sprite->data[1] = (sprite->data[1] + 20) & 0xFF; - sprite->pos2.x = Sin(sprite->data[1], 2); - if (sprite->data[0] == 15) - { - PlaySE(SE_BOWA); - StartSpriteAnim(sprite, 2); - } - } - } -} - -struct UnkStruct_82349CC -{ - u8 field_0; - u8 field_1; - u8 field_2; - u8 field_3; -}; - -extern const struct UnkStruct_82349CC gUnknown_82349CC[NUM_SPECIES]; - -static void SpriteCB_Egg_2(struct Sprite* sprite) -{ - if (++sprite->data[2] > 30) - { - if (++sprite->data[0] > 38) - { - u16 species; - - sprite->callback = SpriteCB_Egg_3; - sprite->data[0] = 0; - species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); - gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0; - gSprites[sEggHatchData->pokeSpriteID].pos2.y = gUnknown_82349CC[species].field_1; - } - else - { - sprite->data[1] = (sprite->data[1] + 20) & 0xFF; - sprite->pos2.x = Sin(sprite->data[1], 2); - if (sprite->data[0] == 15) - { - PlaySE(SE_BOWA); - StartSpriteAnim(sprite, 2); - CreateRandomEggShardSprite(); - CreateRandomEggShardSprite(); - } - if (sprite->data[0] == 30) - PlaySE(SE_BOWA); - } - } -} - -static void SpriteCB_Egg_3(struct Sprite* sprite) -{ - if (++sprite->data[0] > 50) - { - sprite->callback = SpriteCB_Egg_4; - sprite->data[0] = 0; - } -} - -static void SpriteCB_Egg_4(struct Sprite* sprite) -{ - s16 i; - if (sprite->data[0] == 0) - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 0x10, 0xFFFF); - if (sprite->data[0] < 4u) - { - for (i = 0; i <= 3; i++) - CreateRandomEggShardSprite(); - } - sprite->data[0]++; - if (!gPaletteFade.active) - { - PlaySE(SE_JIHANKI); - sprite->invisible = TRUE; - sprite->callback = SpriteCB_Egg_5; - sprite->data[0] = 0; - } -} - -static void SpriteCB_Egg_5(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - gSprites[sEggHatchData->pokeSpriteID].invisible = FALSE; - StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], 1); - } - if (sprite->data[0] == 8) - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0x10, 0, 0xFFFF); - if (sprite->data[0] <= 9) - gSprites[sEggHatchData->pokeSpriteID].pos1.y -= 1; - if (sprite->data[0] > 40) - sprite->callback = SpriteCallbackDummy; - sprite->data[0]++; -} - -static void SpriteCB_EggShard(struct Sprite* sprite) -{ - sprite->data[4] += sprite->data[1]; - sprite->data[5] += sprite->data[2]; - - sprite->pos2.x = sprite->data[4] / 256; - sprite->pos2.y = sprite->data[5] / 256; - - sprite->data[2] += sprite->data[3]; - - if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data[2] > 0) - DestroySprite(sprite); -} - -static void CreateRandomEggShardSprite(void) -{ - u16 spriteAnimIndex; - - s16 velocity1 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][0]; - s16 velocity2 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][1]; - sEggHatchData->eggShardVelocityID++; - spriteAnimIndex = Random() % 4; - CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex); -} - -static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex) -{ - u8 spriteID = CreateSprite(&sSpriteTemplate_EggShard, x, y, 4); - gSprites[spriteID].data[1] = data1; - gSprites[spriteID].data[2] = data2; - gSprites[spriteID].data[3] = data3; - StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex); -} - -static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed) -{ - FillWindowPixelBuffer(windowId, 0xFF); - sEggHatchData->textColor.fgColor = 0; - sEggHatchData->textColor.bgColor = 5; - sEggHatchData->textColor.shadowColor = 6; - AddTextPrinterParameterized4(windowId, 3, x, y, 1, 1, &sEggHatchData->textColor, speed, string); -} -- cgit v1.2.3