diff options
-rw-r--r-- | asm/pokeblock_feed.s | 1699 | ||||
-rw-r--r-- | include/pokeblock.h | 21 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/mori_debug_menu.c | 2 | ||||
-rw-r--r-- | src/pokeblock.c | 44 | ||||
-rw-r--r-- | src/pokeblock_feed.c | 577 | ||||
-rw-r--r-- | src/use_pokeblock.c | 18 | ||||
-rw-r--r-- | src/wild_encounter.c | 2 | ||||
-rw-r--r-- | sym_common.txt | 12 | ||||
-rw-r--r-- | sym_ewram.txt | 2 |
10 files changed, 635 insertions, 1743 deletions
diff --git a/asm/pokeblock_feed.s b/asm/pokeblock_feed.s index 7df634399..182d28081 100644 --- a/asm/pokeblock_feed.s +++ b/asm/pokeblock_feed.s @@ -6,1707 +6,8 @@ .text - thumb_func_start sub_8147890 -sub_8147890: @ 8147890 - push {lr} - bl AnimateSprites - bl BuildOamBuffer - bl RunTasks - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_8147890 - - thumb_func_start sub_81478A8 -sub_81478A8: @ 81478A8 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_81478A8 - - thumb_func_start sub_81478BC -sub_81478BC: @ 81478BC - push {r4,lr} - sub sp, 0x4 - ldr r0, _081478D8 @ =gMain - ldr r1, _081478DC @ =0x0000043c - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0xD - bls _081478CE - b _08147AD0 -_081478CE: - lsls r0, 2 - ldr r1, _081478E0 @ =_081478E4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081478D8: .4byte gMain -_081478DC: .4byte 0x0000043c -_081478E0: .4byte _081478E4 - .align 2, 0 -_081478E4: - .4byte _0814791C - .4byte _08147938 - .4byte _0814794C - .4byte _08147960 - .4byte _08147966 - .4byte _08147980 - .4byte _0814798C - .4byte _081479B8 - .4byte _081479DC - .4byte _081479F4 - .4byte _08147A20 - .4byte _08147A3C - .4byte _08147A5C - .4byte _08147A8C -_0814791C: - bl sub_80F9438 - bl sub_80F9368 - bl sub_8147B04 - ldr r1, _08147930 @ =gMain - ldr r2, _08147934 @ =0x0000043c - adds r1, r2 - b _08147A4A - .align 2, 0 -_08147930: .4byte gMain -_08147934: .4byte 0x0000043c -_08147938: - bl ResetPaletteFade - ldr r2, _08147948 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - b _08147A44 - .align 2, 0 -_08147948: .4byte gPaletteFade -_0814794C: - bl ResetSpriteData - ldr r1, _08147958 @ =gMain - ldr r2, _0814795C @ =0x0000043c - adds r1, r2 - b _08147A4A - .align 2, 0 -_08147958: .4byte gMain -_0814795C: .4byte 0x0000043c -_08147960: - bl FreeAllSpritePalettes - b _08147A44 -_08147966: - ldr r0, _08147974 @ =gWindowConfig_81E6E50 - bl SetUpWindowConfig - ldr r1, _08147978 @ =gMain - ldr r2, _0814797C @ =0x0000043c - adds r1, r2 - b _08147A4A - .align 2, 0 -_08147974: .4byte gWindowConfig_81E6E50 -_08147978: .4byte gMain -_0814797C: .4byte 0x0000043c -_08147980: - ldr r0, _08147988 @ =gWindowConfig_81E6E50 - bl MultistepInitMenuWindowBegin - b _08147A44 - .align 2, 0 -_08147988: .4byte gWindowConfig_81E6E50 -_0814798C: - bl MultistepInitMenuWindowContinue - cmp r0, 0 - bne _08147996 - b _08147AD0 -_08147996: - ldr r0, _081479A8 @ =0x02000000 - ldr r1, _081479AC @ =0x0001ffff - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r1, _081479B0 @ =gMain - ldr r2, _081479B4 @ =0x0000043c - adds r1, r2 - b _08147A4A - .align 2, 0 -_081479A8: .4byte 0x02000000 -_081479AC: .4byte 0x0001ffff -_081479B0: .4byte gMain -_081479B4: .4byte 0x0000043c -_081479B8: - ldr r0, _081479D4 @ =gUnknown_02039310 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _081479D8 @ =gPlayerParty - adds r0, r1 - bl sub_8147B20 - lsls r0, 24 - cmp r0, 0 - bne _081479D0 - b _08147AD0 -_081479D0: - b _08147A44 - .align 2, 0 -_081479D4: .4byte gUnknown_02039310 -_081479D8: .4byte gPlayerParty -_081479DC: - bl sub_81480B4 - ldr r1, _081479EC @ =0x02000000 - ldr r2, _081479F0 @ =0x0001fffd - adds r1, r2 - strb r0, [r1] - b _08147A44 - .align 2, 0 -_081479EC: .4byte 0x02000000 -_081479F0: .4byte 0x0001fffd -_081479F4: - ldr r0, _08147A10 @ =gUnknown_02039310 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08147A14 @ =gPlayerParty - adds r0, r1 - bl sub_8147F84 - ldr r1, _08147A18 @ =0x02000000 - ldr r2, _08147A1C @ =0x0001fffe - adds r1, r2 - strb r0, [r1] - b _08147A44 - .align 2, 0 -_08147A10: .4byte gUnknown_02039310 -_08147A14: .4byte gPlayerParty -_08147A18: .4byte 0x02000000 -_08147A1C: .4byte 0x0001fffe -_08147A20: - movs r0, 0 - movs r1, 0xE - movs r2, 0x1D - movs r3, 0x13 - bl MenuDrawTextWindow - ldr r1, _08147A34 @ =gMain - ldr r2, _08147A38 @ =0x0000043c - adds r1, r2 - b _08147A4A - .align 2, 0 -_08147A34: .4byte gMain -_08147A38: .4byte 0x0000043c -_08147A3C: - bl sub_8055870 - cmp r0, 0x1 - beq _08147AD0 -_08147A44: - ldr r1, _08147A54 @ =gMain - ldr r0, _08147A58 @ =0x0000043c - adds r1, r0 -_08147A4A: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08147AD0 - .align 2, 0 -_08147A54: .4byte gMain -_08147A58: .4byte 0x0000043c -_08147A5C: - ldr r3, _08147AB0 @ =0x04000208 - ldrh r2, [r3] - movs r0, 0 - strh r0, [r3] - ldr r4, _08147AB4 @ =0x04000200 - ldrh r0, [r4] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - ldr r2, _08147AB8 @ =REG_DISPSTAT - ldrh r0, [r2] - movs r1, 0x8 - orrs r0, r1 - strh r0, [r2] - ldr r0, _08147ABC @ =sub_81478A8 - bl SetVBlankCallback - ldr r1, _08147AC0 @ =gMain - ldr r2, _08147AC4 @ =0x0000043c - adds r1, r2 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08147A8C: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r2, _08147AC8 @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] - ldr r0, _08147ACC @ =sub_8147890 - bl SetMainCallback2 - movs r0, 0x1 - b _08147AD2 - .align 2, 0 -_08147AB0: .4byte 0x04000208 -_08147AB4: .4byte 0x04000200 -_08147AB8: .4byte REG_DISPSTAT -_08147ABC: .4byte sub_81478A8 -_08147AC0: .4byte gMain -_08147AC4: .4byte 0x0000043c -_08147AC8: .4byte gPaletteFade -_08147ACC: .4byte sub_8147890 -_08147AD0: - movs r0, 0 -_08147AD2: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81478BC - - thumb_func_start sub_8147ADC -sub_8147ADC: @ 8147ADC - push {lr} -_08147ADE: - bl sub_81478BC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08147AF2 - movs r0, 0x1 - bl sub_8147DDC - b _08147AFE -_08147AF2: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08147ADE -_08147AFE: - pop {r0} - bx r0 - thumb_func_end sub_8147ADC - - thumb_func_start sub_8147B04 -sub_8147B04: @ 8147B04 - ldr r1, _08147B18 @ =REG_BG1CNT - ldr r2, _08147B1C @ =0x00001d02 - adds r0, r2, 0 - strh r0, [r1] - subs r1, 0xA - movs r2, 0x9A - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - bx lr - .align 2, 0 -_08147B18: .4byte REG_BG1CNT -_08147B1C: .4byte 0x00001d02 - thumb_func_end sub_8147B04 - - thumb_func_start sub_8147B20 -sub_8147B20: @ 8147B20 - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - ldr r0, _08147B40 @ =0x02000000 - ldr r1, _08147B44 @ =0x0001ffff - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x8 - bls _08147B34 - b _08147C84 -_08147B34: - lsls r0, 2 - ldr r1, _08147B48 @ =_08147B4C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08147B40: .4byte 0x02000000 -_08147B44: .4byte 0x0001ffff -_08147B48: .4byte _08147B4C - .align 2, 0 -_08147B4C: - .4byte _08147B70 - .4byte _08147BB8 - .4byte _08147BF0 - .4byte _08147BFC - .4byte _08147C08 - .4byte _08147C14 - .4byte _08147C2C - .4byte _08147C38 - .4byte _08147C60 -_08147B70: - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - adds r6, r0, 0 - lsls r0, r5, 3 - ldr r1, _08147BAC @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _08147BB0 @ =gMonFrontPicCoords - lsls r2, r5, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _08147BB4 @ =gUnknown_081FAF4C - ldr r4, [r4, 0x4] - str r4, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - bl HandleLoadSpecialPokePic - b _08147C40 - .align 2, 0 -_08147BAC: .4byte gMonFrontPicTable -_08147BB0: .4byte gMonFrontPicCoords -_08147BB4: .4byte gUnknown_081FAF4C -_08147BB8: - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - adds r6, r0, 0 - adds r0, r4, 0 - movs r1, 0x1 - bl GetMonData - adds r1, r0, 0 - adds r0, r5, 0 - adds r2, r6, 0 - bl sub_80409C8 - adds r4, r0, 0 - bl LoadCompressedObjectPalette - ldrh r0, [r4, 0x4] - movs r1, 0x1 - bl GetMonSpriteTemplate_803C56C - b _08147C40 -_08147BF0: - ldr r0, _08147BF8 @ =gUnknown_083F7F74 - bl LoadCompressedObjectPic - b _08147C40 - .align 2, 0 -_08147BF8: .4byte gUnknown_083F7F74 -_08147BFC: - ldr r0, _08147C04 @ =gUnknown_083F7F7C - bl LoadCompressedObjectPalette - b _08147C40 - .align 2, 0 -_08147C04: .4byte gUnknown_083F7F7C -_08147C08: - ldr r0, _08147C10 @ =gUnknown_084121DC - bl LoadCompressedObjectPic - b _08147C40 - .align 2, 0 -_08147C10: .4byte gUnknown_084121DC -_08147C14: - ldr r0, _08147C24 @ =gScriptItemId - ldrb r0, [r0] - bl sub_8147C90 - ldr r0, _08147C28 @ =gUnknown_02039350 - bl LoadCompressedObjectPalette - b _08147C40 - .align 2, 0 -_08147C24: .4byte gScriptItemId -_08147C28: .4byte gUnknown_02039350 -_08147C2C: - ldr r0, _08147C34 @ =gBattleTerrainTiles_Building - movs r1, 0xC0 - lsls r1, 19 - b _08147C3C - .align 2, 0 -_08147C34: .4byte gBattleTerrainTiles_Building -_08147C38: - ldr r0, _08147C50 @ =gUnknown_08E782FC - ldr r1, _08147C54 @ =0x0600e800 -_08147C3C: - bl LZDecompressVram -_08147C40: - ldr r1, _08147C58 @ =0x02000000 - ldr r0, _08147C5C @ =0x0001ffff - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08147C84 - .align 2, 0 -_08147C50: .4byte gUnknown_08E782FC -_08147C54: .4byte 0x0600e800 -_08147C58: .4byte 0x02000000 -_08147C5C: .4byte 0x0001ffff -_08147C60: - ldr r0, _08147C78 @ =gBattleTerrainPalette_BattleTower - movs r1, 0x20 - movs r2, 0x60 - bl LoadCompressedPalette - ldr r0, _08147C7C @ =0x02000000 - ldr r1, _08147C80 @ =0x0001ffff - adds r0, r1 - movs r1, 0 - strb r1, [r0] - movs r0, 0x1 - b _08147C86 - .align 2, 0 -_08147C78: .4byte gBattleTerrainPalette_BattleTower -_08147C7C: .4byte 0x02000000 -_08147C80: .4byte 0x0001ffff -_08147C84: - movs r0, 0 -_08147C86: - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8147B20 - - thumb_func_start sub_8147C90 -sub_8147C90: @ 8147C90 - push {lr} - lsls r0, 24 - lsrs r0, 21 - ldr r1, _08147CB8 @ =gSaveBlock1 + 0x7F8 - adds r0, r1 - movs r1, 0 - bl sub_810CA9C - lsls r0, 24 - ldr r2, _08147CBC @ =gUnknown_02039350 - ldr r1, _08147CC0 @ =gUnknown_084120A4 - lsrs r0, 22 - subs r0, 0x4 - adds r0, r1 - ldr r0, [r0] - str r0, [r2] - ldr r0, _08147CC4 @ =0x000039e2 - strh r0, [r2, 0x4] - pop {r0} - bx r0 - .align 2, 0 -_08147CB8: .4byte gSaveBlock1 + 0x7F8 -_08147CBC: .4byte gUnknown_02039350 -_08147CC0: .4byte gUnknown_084120A4 -_08147CC4: .4byte 0x000039e2 - thumb_func_end sub_8147C90 - - thumb_func_start sub_8147CC8 -sub_8147CC8: @ 8147CC8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08147D00 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08147CDC - b _08147DCE -_08147CDC: - ldr r0, _08147D04 @ =gTasks - lsls r2, r4, 2 - adds r1, r2, r4 - lsls r1, 3 - adds r1, r0 - movs r0, 0x8 - ldrsh r3, [r1, r0] - ldr r0, _08147D08 @ =0x0000010d - adds r5, r2, 0 - cmp r3, r0 - beq _08147D50 - cmp r3, r0 - bgt _08147D0C - cmp r3, 0 - beq _08147D20 - cmp r3, 0xFF - beq _08147D38 - b _08147D8C - .align 2, 0 -_08147D00: .4byte gPaletteFade -_08147D04: .4byte gTasks -_08147D08: .4byte 0x0000010d -_08147D0C: - ldr r0, _08147D1C @ =0x00000119 - cmp r3, r0 - beq _08147D68 - adds r0, 0x10 - cmp r3, r0 - beq _08147D80 - b _08147D8C - .align 2, 0 -_08147D1C: .4byte 0x00000119 -_08147D20: - ldr r0, _08147D30 @ =gUnknown_03005F3C - strb r3, [r0] - ldr r0, _08147D34 @ =gUnknown_03005F94 - strh r3, [r0] - bl sub_81481DC - b _08147D8C - .align 2, 0 -_08147D30: .4byte gUnknown_03005F3C -_08147D34: .4byte gUnknown_03005F94 -_08147D38: - ldr r0, _08147D48 @ =0x02000000 - ldr r2, _08147D4C @ =0x0001fffd - adds r0, r2 - ldrb r0, [r0] - ldrb r1, [r1, 0xA] - bl sub_8148108 - b _08147D8C - .align 2, 0 -_08147D48: .4byte 0x02000000 -_08147D4C: .4byte 0x0001fffd -_08147D50: - bl sub_814817C - ldr r1, _08147D60 @ =0x02000000 - ldr r2, _08147D64 @ =0x0001fffc - adds r1, r2 - strb r0, [r1] - b _08147D8C - .align 2, 0 -_08147D60: .4byte 0x02000000 -_08147D64: .4byte 0x0001fffc -_08147D68: - ldr r0, _08147D78 @ =0x02000000 - ldr r1, _08147D7C @ =0x0001fffe - adds r0, r1 - ldrb r0, [r0] - bl sub_8148044 - b _08147D8C - .align 2, 0 -_08147D78: .4byte 0x02000000 -_08147D7C: .4byte 0x0001fffe -_08147D80: - ldr r0, _08147D88 @ =sub_8147E40 - str r0, [r1] - b _08147DCE - .align 2, 0 -_08147D88: .4byte sub_8147E40 -_08147D8C: - ldr r0, _08147DA0 @ =gUnknown_03005F94 - ldr r1, _08147DA4 @ =gUnknown_03005F34 - ldrh r2, [r0] - ldrh r0, [r1] - cmp r2, r0 - bcs _08147DA8 - bl sub_814825C - b _08147DB8 - .align 2, 0 -_08147DA0: .4byte gUnknown_03005F94 -_08147DA4: .4byte gUnknown_03005F34 -_08147DA8: - cmp r2, r0 - bne _08147DB8 - ldr r0, _08147DD4 @ =gTasks - adds r1, r5, r4 - lsls r1, 3 - adds r1, r0 - movs r0, 0xFE - strh r0, [r1, 0x8] -_08147DB8: - ldr r1, _08147DD8 @ =gUnknown_03005F94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - ldr r0, _08147DD4 @ =gTasks - adds r1, r5, r4 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] -_08147DCE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08147DD4: .4byte gTasks -_08147DD8: .4byte gUnknown_03005F94 - thumb_func_end sub_8147CC8 - - thumb_func_start sub_8147DDC -sub_8147DDC: @ 8147DDC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08147E08 @ =sub_8147CC8 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08147E0C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r0, [r1, 0x8] - strh r4, [r1, 0xA] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08147E08: .4byte sub_8147CC8 -_08147E0C: .4byte gTasks - thumb_func_end sub_8147DDC - - thumb_func_start sub_8147E10 -sub_8147E10: @ 8147E10 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl MenuUpdateWindowText - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08147E30 - ldr r0, _08147E38 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08147E3C @ =sub_8147F4C - str r0, [r1] -_08147E30: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08147E38: .4byte gTasks -_08147E3C: .4byte sub_8147F4C - thumb_func_end sub_8147E10 - - thumb_func_start sub_8147E40 -sub_8147E40: @ 8147E40 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08147E94 @ =gUnknown_02039310 - ldrb r1, [r0] - movs r0, 0x64 - adds r5, r1, 0 - muls r5, r0 - ldr r0, _08147E98 @ =gPlayerParty - adds r5, r0 - ldr r0, _08147E9C @ =gScriptItemId - ldrh r4, [r0] - lsls r4, 3 - ldr r0, _08147EA0 @ =gSaveBlock1 + 0x7F8 - adds r4, r0 - adds r0, r5, 0 - bl GetNature - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - bl sub_810CAE4 - ldr r6, _08147EA4 @ =gUnknown_02039312 - strh r0, [r6] - ldr r1, _08147EA8 @ =gStringVar1 - adds r0, r5, 0 - bl GetMonNickname - ldr r1, _08147EAC @ =gStringVar2 - adds r0, r4, 0 - bl sub_810CB44 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _08147EB8 - ldr r0, _08147EB0 @ =gStringVar4 - ldr r1, _08147EB4 @ =gContestStatsText_NormallyAte - bl StringExpandPlaceholders - b _08147ED8 - .align 2, 0 -_08147E94: .4byte gUnknown_02039310 -_08147E98: .4byte gPlayerParty -_08147E9C: .4byte gScriptItemId -_08147EA0: .4byte gSaveBlock1 + 0x7F8 -_08147EA4: .4byte gUnknown_02039312 -_08147EA8: .4byte gStringVar1 -_08147EAC: .4byte gStringVar2 -_08147EB0: .4byte gStringVar4 -_08147EB4: .4byte gContestStatsText_NormallyAte -_08147EB8: - cmp r0, 0 - ble _08147ED0 - ldr r0, _08147EC8 @ =gStringVar4 - ldr r1, _08147ECC @ =gContestStatsText_HappilyAte - bl StringExpandPlaceholders - b _08147ED8 - .align 2, 0 -_08147EC8: .4byte gStringVar4 -_08147ECC: .4byte gContestStatsText_HappilyAte -_08147ED0: - ldr r0, _08147EF8 @ =gStringVar4 - ldr r1, _08147EFC @ =gContestStatsText_DisdainfullyAte - bl StringExpandPlaceholders -_08147ED8: - ldr r0, _08147EF8 @ =gStringVar4 - movs r1, 0x1 - movs r2, 0xF - bl MenuPrintMessage - ldr r1, _08147F00 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - ldr r1, _08147F04 @ =sub_8147E10 - str r1, [r0] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08147EF8: .4byte gStringVar4 -_08147EFC: .4byte gContestStatsText_DisdainfullyAte -_08147F00: .4byte gTasks -_08147F04: .4byte sub_8147E10 - thumb_func_end sub_8147E40 - - thumb_func_start sub_8147F08 -sub_8147F08: @ 8147F08 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08147F3C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08147F34 - ldr r0, _08147F40 @ =gMPlay_BGM - ldr r1, _08147F44 @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl - ldr r0, _08147F48 @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_08147F34: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08147F3C: .4byte gPaletteFade -_08147F40: .4byte gMPlay_BGM -_08147F44: .4byte 0x0000ffff -_08147F48: .4byte gMain - thumb_func_end sub_8147F08 - - thumb_func_start sub_8147F4C -sub_8147F4C: @ 8147F4C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _08147F7C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08147F80 @ =sub_8147F08 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08147F7C: .4byte gTasks -_08147F80: .4byte sub_8147F08 - thumb_func_end sub_8147F4C - - thumb_func_start sub_8147F84 -sub_8147F84: @ 8147F84 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r5, r0, 0 - movs r1, 0x41 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08148024 @ =gUnknown_02024E8C - movs r1, 0x30 - movs r2, 0x50 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _08148028 @ =gUnknown_03005F24 - strh r4, [r0] - ldr r0, _0814802C @ =gUnknown_03005F2C - mov r1, r8 - strb r1, [r0] - adds r0, r5, 0 - bl GetNature - ldr r1, _08148030 @ =gUnknown_03005F30 - strb r0, [r1] - ldr r7, _08148034 @ =gSprites - mov r1, r8 - lsls r0, r1, 4 - add r0, r8 - lsls r5, r0, 2 - adds r6, r5, r7 - strh r4, [r6, 0x32] - adds r0, r7, 0 - adds r0, 0x1C - adds r0, r5, r0 - ldr r1, _08148038 @ =SpriteCallbackDummy - str r1, [r0] - ldr r0, _0814803C @ =gUnknown_03005F28 - mov r9, r0 - movs r0, 0x1 - mov r1, r9 - strb r0, [r1] - adds r0, r4, 0 - bl sub_8040A3C - lsls r0, 24 - cmp r0, 0 - bne _08148016 - adds r0, r7, 0 - adds r0, 0x10 - adds r0, r5, r0 - ldr r1, _08148040 @ =gSpriteAffineAnimTable_84120EC - str r1, [r0] - ldrb r3, [r6, 0x1] - movs r0, 0x3 - orrs r3, r0 - strb r3, [r6, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r6, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - adds r0, r6, 0 - bl CalcCenterToCornerVec - movs r0, 0 - mov r1, r9 - strb r0, [r1] -_08148016: - mov r0, r8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08148024: .4byte gUnknown_02024E8C -_08148028: .4byte gUnknown_03005F24 -_0814802C: .4byte gUnknown_03005F2C -_08148030: .4byte gUnknown_03005F30 -_08148034: .4byte gSprites -_08148038: .4byte SpriteCallbackDummy -_0814803C: .4byte gUnknown_03005F28 -_08148040: .4byte gSpriteAffineAnimTable_84120EC - thumb_func_end sub_8147F84 - - thumb_func_start sub_8148044 -sub_8148044: @ 8148044 - lsls r0, 24 - lsrs r0, 24 - ldr r3, _0814806C @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r2, r1, r3 - movs r0, 0x30 - strh r0, [r2, 0x20] - movs r0, 0x50 - strh r0, [r2, 0x22] - ldr r0, _08148070 @ =0x0000fff8 - strh r0, [r2, 0x2E] - movs r0, 0x1 - strh r0, [r2, 0x30] - adds r3, 0x1C - adds r1, r3 - ldr r0, _08148074 @ =sub_8148078 - str r0, [r1] - bx lr - .align 2, 0 -_0814806C: .4byte gSprites -_08148070: .4byte 0x0000fff8 -_08148074: .4byte sub_8148078 - thumb_func_end sub_8148044 - - thumb_func_start sub_8148078 -sub_8148078: @ 8148078 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - adds r0, 0x4 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x2E] - ldrh r2, [r4, 0x22] - adds r1, r0, r2 - strh r1, [r4, 0x22] - ldrh r1, [r4, 0x30] - adds r0, r1 - strh r0, [r4, 0x2E] - lsls r0, 16 - cmp r0, 0 - bne _0814809E - ldrh r0, [r4, 0x32] - movs r1, 0 - bl PlayCry1 -_0814809E: - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x9 - bne _081480AA - ldr r0, _081480B0 @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_081480AA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081480B0: .4byte SpriteCallbackDummy - thumb_func_end sub_8148078 - - thumb_func_start sub_81480B4 -sub_81480B4: @ 81480B4 - push {r4,r5,lr} - movs r0, 0xBC - movs r1, 0x64 - movs r2, 0x2 - bl sub_810BA50 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _081480FC @ =gSprites - lsls r3, r4, 4 - adds r3, r4 - lsls r3, 2 - adds r0, r3, r5 - ldrb r2, [r0, 0x1] - movs r1, 0x4 - negs r1, r1 - ands r1, r2 - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0, 0x1] - adds r1, r5, 0 - adds r1, 0x10 - adds r1, r3, r1 - ldr r2, _08148100 @ =gSpriteAffineAnimTable_84121A0 - str r2, [r1] - adds r5, 0x1C - adds r3, r5 - ldr r1, _08148104 @ =SpriteCallbackDummy - str r1, [r3] - bl InitSpriteAffineAnim - adds r0, r4, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_081480FC: .4byte gSprites -_08148100: .4byte gSpriteAffineAnimTable_84121A0 -_08148104: .4byte SpriteCallbackDummy - thumb_func_end sub_81480B4 - - thumb_func_start sub_8148108 -sub_8148108: @ 8148108 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r1, 0 - lsls r0, 24 - lsrs r7, r0, 24 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _08148148 @ =gSprites - mov r8, r0 - lsls r0, r7, 4 - adds r0, r7 - lsls r6, r0, 2 - mov r0, r8 - adds r4, r6, r0 - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r0, [r4, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r4, 0x1] - cmp r5, 0 - bne _08148150 - mov r0, r8 - adds r0, 0x10 - adds r0, r6, r0 - ldr r1, _0814814C @ =gSpriteAffineAnimTable_84121A4 - b _08148158 - .align 2, 0 -_08148148: .4byte gSprites -_0814814C: .4byte gSpriteAffineAnimTable_84121A4 -_08148150: - mov r0, r8 - adds r0, 0x10 - adds r0, r6, r0 - ldr r1, _08148174 @ =gSpriteAffineAnimTable_84121A8 -_08148158: - str r1, [r0] - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - ldr r1, _08148178 @ =gSprites - adds r0, r1 - bl InitSpriteAffineAnim - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08148174: .4byte gSpriteAffineAnimTable_84121A8 -_08148178: .4byte gSprites - thumb_func_end sub_8148108 - - thumb_func_start sub_814817C -sub_814817C: @ 814817C - push {lr} - ldr r0, _081481A4 @ =gSpriteTemplate_84121E4 - movs r1, 0xAE - movs r2, 0x54 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, _081481A8 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldr r2, _081481AC @ =0x0000fff4 - strh r2, [r1, 0x2E] - movs r2, 0x1 - strh r2, [r1, 0x30] - pop {r1} - bx r1 - .align 2, 0 -_081481A4: .4byte gSpriteTemplate_84121E4 -_081481A8: .4byte gSprites -_081481AC: .4byte 0x0000fff4 - thumb_func_end sub_814817C - - thumb_func_start sub_81481B0 -sub_81481B0: @ 81481B0 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x20] - subs r0, 0x4 - strh r0, [r2, 0x20] - ldrh r0, [r2, 0x2E] - ldrh r3, [r2, 0x22] - adds r1, r0, r3 - strh r1, [r2, 0x22] - ldrh r1, [r2, 0x30] - adds r0, r1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _081481D6 - adds r0, r2, 0 - bl DestroySprite -_081481D6: - pop {r0} - bx r0 - thumb_func_end sub_81481B0 - - thumb_func_start sub_81481DC -sub_81481DC: @ 81481DC - push {r4-r7,lr} - ldr r6, _0814824C @ =gUnknown_03005F34 - movs r0, 0x1 - strh r0, [r6] - ldr r1, _08148250 @ =gNatureToMonPokeblockAnim - ldr r0, _08148254 @ =gUnknown_03005F30 - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrb r3, [r0] - movs r4, 0 - ldr r2, _08148258 @ =gMonPokeblockAnims - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 2 - adds r7, r2, 0 - adds r7, 0x8 - adds r0, r1, r7 - ldrh r0, [r0] - adds r0, 0x1 - strh r0, [r6] - adds r5, r2, 0 - adds r5, 0x12 - adds r1, r5 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0x1 - beq _08148244 - adds r2, r6, 0 - adds r6, r5, 0 - adds r5, r7, 0 -_0814821A: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r4, 0x7 - bhi _08148244 - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 2 - adds r0, r1, r5 - ldrh r0, [r0] - ldrh r7, [r2] - adds r0, r7 - strh r0, [r2] - adds r1, r6 - movs r7, 0 - ldrsh r0, [r1, r7] - cmp r0, 0x1 - bne _0814821A -_08148244: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0814824C: .4byte gUnknown_03005F34 -_08148250: .4byte gNatureToMonPokeblockAnim -_08148254: .4byte gUnknown_03005F30 -_08148258: .4byte gMonPokeblockAnims - thumb_func_end sub_81481DC - - thumb_func_start sub_814825C -sub_814825C: @ 814825C - push {lr} - ldr r0, _08148274 @ =gUnknown_03005F3C - ldrb r0, [r0] - cmp r0, 0x5A - bls _08148268 - b _08148532 -_08148268: - lsls r0, 2 - ldr r1, _08148278 @ =_0814827C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08148274: .4byte gUnknown_03005F3C -_08148278: .4byte _0814827C - .align 2, 0 -_0814827C: - .4byte _081483E8 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _0814843C - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _0814847A - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _081484CC - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148524 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 - .4byte _08148532 -_081483E8: - ldr r2, _0814841C @ =gUnknown_03005F40 - ldr r1, _08148420 @ =gNatureToMonPokeblockAnim - ldr r0, _08148424 @ =gUnknown_03005F30 - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldr r2, _08148428 @ =gUnknown_03005F20 - ldr r0, _0814842C @ =gUnknown_03005F2C - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08148430 @ =gSprites - adds r1, r0 - str r1, [r2] - ldr r0, _08148434 @ =gUnknown_03005F50 - movs r2, 0x44 - bl memcpy - ldr r1, _08148438 @ =gUnknown_03005F3C - movs r0, 0xA - strb r0, [r1] - b _08148532 - .align 2, 0 -_0814841C: .4byte gUnknown_03005F40 -_08148420: .4byte gNatureToMonPokeblockAnim -_08148424: .4byte gUnknown_03005F30 -_08148428: .4byte gUnknown_03005F20 -_0814842C: .4byte gUnknown_03005F2C -_08148430: .4byte gSprites -_08148434: .4byte gUnknown_03005F50 -_08148438: .4byte gUnknown_03005F3C -_0814843C: - bl sub_8148540 - ldr r1, _081484A4 @ =gNatureToMonPokeblockAnim - ldr r0, _081484A8 @ =gUnknown_03005F30 - ldrb r0, [r0] - lsls r0, 1 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08148474 - ldr r3, _081484AC @ =gUnknown_03005F20 - ldr r2, [r3] - ldrb r0, [r2, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r2, 0x1] - ldr r2, [r3] - ldrb r1, [r2, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - strb r0, [r2, 0x3] - ldr r0, [r3] - ldr r1, _081484B0 @ =gSpriteAffineAnimTable_8412050 - str r1, [r0, 0x10] - bl InitSpriteAffineAnim -_08148474: - ldr r1, _081484B4 @ =gUnknown_03005F3C - movs r0, 0x32 - strb r0, [r1] -_0814847A: - ldr r1, _081484A4 @ =gNatureToMonPokeblockAnim - ldr r0, _081484A8 @ =gUnknown_03005F30 - ldrb r0, [r0] - lsls r0, 1 - adds r1, 0x1 - adds r2, r0, r1 - ldrb r1, [r2] - cmp r1, 0 - beq _081484EE - ldr r0, _081484B8 @ =gUnknown_03005F28 - ldrb r0, [r0] - cmp r0, 0 - bne _081484BC - ldr r0, _081484AC @ =gUnknown_03005F20 - ldr r0, [r0] - adds r1, 0xA - lsls r1, 24 - lsrs r1, 24 - bl StartSpriteAffineAnim - b _081484EE - .align 2, 0 -_081484A4: .4byte gNatureToMonPokeblockAnim -_081484A8: .4byte gUnknown_03005F30 -_081484AC: .4byte gUnknown_03005F20 -_081484B0: .4byte gSpriteAffineAnimTable_8412050 -_081484B4: .4byte gUnknown_03005F3C -_081484B8: .4byte gUnknown_03005F28 -_081484BC: - ldr r0, _081484C8 @ =gUnknown_03005F20 - ldr r0, [r0] - ldrb r1, [r2] - bl StartSpriteAffineAnim - b _081484EE - .align 2, 0 -_081484C8: .4byte gUnknown_03005F20 -_081484CC: - bl sub_81485CC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08148532 - ldr r0, _081484F8 @ =gUnknown_03005FA0 - movs r1, 0x12 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08148504 - ldr r1, _081484FC @ =gUnknown_03005F40 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - bl sub_8148540 -_081484EE: - ldr r1, _08148500 @ =gUnknown_03005F3C - movs r0, 0x3C - strb r0, [r1] - b _08148532 - .align 2, 0 -_081484F8: .4byte gUnknown_03005FA0 -_081484FC: .4byte gUnknown_03005F40 -_08148500: .4byte gUnknown_03005F3C -_08148504: - ldr r0, _0814851C @ =gUnknown_03005F20 - ldr r0, [r0] - ldrb r0, [r0, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldr r1, _08148520 @ =gUnknown_03005F3C - movs r0, 0x46 - strb r0, [r1] - b _08148532 - .align 2, 0 -_0814851C: .4byte gUnknown_03005F20 -_08148520: .4byte gUnknown_03005F3C -_08148524: - bl sub_8148618 - ldr r0, _08148538 @ =gUnknown_03005F40 - movs r1, 0 - strb r1, [r0] - ldr r0, _0814853C @ =gUnknown_03005F3C - strb r1, [r0] -_08148532: - pop {r0} - bx r0 - .align 2, 0 -_08148538: .4byte gUnknown_03005F40 -_0814853C: .4byte gUnknown_03005F3C - thumb_func_end sub_814825C - - thumb_func_start sub_8148540 -sub_8148540: @ 8148540 - push {r4-r7,lr} - movs r4, 0 - ldr r5, _081485B4 @ =gUnknown_03005FA0 - mov r12, r5 - ldr r7, _081485B8 @ =gMonPokeblockAnims - ldr r6, _081485BC @ =gUnknown_03005F40 -_0814854C: - lsls r2, r4, 1 - mov r0, r12 - adds r3, r2, r0 - ldrb r1, [r6] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r2, r0 - adds r2, r7 - ldrh r0, [r2] - strh r0, [r3] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x9 - bls _0814854C - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _081485C4 - movs r2, 0 - ldrsh r0, [r5, r2] - movs r2, 0x4 - ldrsh r1, [r5, r2] - bl Sin - strh r0, [r5, 0x14] - movs r1, 0 - ldrsh r0, [r5, r1] - movs r2, 0x6 - ldrsh r1, [r5, r2] - bl Cos - strh r0, [r5, 0x16] - ldrh r0, [r5, 0x8] - strh r0, [r5, 0x18] - ldr r0, _081485C0 @ =gUnknown_03005F20 - ldr r1, [r0] - ldrh r0, [r1, 0x24] - strh r0, [r5, 0x1A] - ldrh r0, [r1, 0x26] - strh r0, [r5, 0x1C] - bl sub_8148710 - ldrh r0, [r5, 0x18] - strh r0, [r5, 0x8] - bl sub_814862C - ldrh r0, [r5, 0x18] - strh r0, [r5, 0x8] - movs r0, 0 - b _081485C6 - .align 2, 0 -_081485B4: .4byte gUnknown_03005FA0 -_081485B8: .4byte gMonPokeblockAnims -_081485BC: .4byte gUnknown_03005F40 -_081485C0: .4byte gUnknown_03005F20 -_081485C4: - movs r0, 0x1 -_081485C6: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8148540 - - thumb_func_start sub_81485CC -sub_81485CC: @ 81485CC - push {r4,lr} - ldr r3, _08148604 @ =gUnknown_03005FA0 - ldrh r0, [r3, 0x18] - ldrh r1, [r3, 0x8] - subs r0, r1 - lsls r0, 16 - ldr r1, _08148608 @ =gUnknown_03005F20 - ldr r4, [r1] - lsrs r0, 15 - ldr r1, _0814860C @ =0x0201d000 - adds r2, r0, r1 - ldrh r2, [r2] - strh r2, [r4, 0x24] - movs r2, 0x80 - lsls r2, 3 - adds r1, r2 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r4, 0x26] - ldrh r0, [r3, 0x8] - subs r0, 0x1 - strh r0, [r3, 0x8] - lsls r0, 16 - cmp r0, 0 - beq _08148610 - movs r0, 0 - b _08148612 - .align 2, 0 -_08148604: .4byte gUnknown_03005FA0 -_08148608: .4byte gUnknown_03005F20 -_0814860C: .4byte 0x0201d000 -_08148610: - movs r0, 0x1 -_08148612: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81485CC - thumb_func_start sub_8148618 -sub_8148618: @ 8148618 - push {lr} - ldr r0, _08148628 @ =gUnknown_03005F20 - ldr r0, [r0] - bl FreeSpriteOamMatrix - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08148628: .4byte gUnknown_03005F20 - thumb_func_end sub_8148618 - thumb_func_start sub_814862C -sub_814862C: @ 814862C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - ldr r1, _08148700 @ =gUnknown_03005FA0 - ldrh r0, [r1, 0x10] - mov r8, r0 - ldrh r0, [r1, 0x18] - mov r2, r8 - subs r0, r2 - lsls r0, 16 - lsrs r7, r0, 16 - ldrh r0, [r1, 0xC] - ldrh r3, [r1, 0x1A] - adds r0, r3 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp] - ldrh r0, [r1, 0xE] - ldrh r1, [r1, 0x1C] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - movs r6, 0 - subs r0, r7, 0x1 - ldr r4, _08148704 @ =0x0201cffe - mov r10, r4 - cmp r6, r0 - bge _081486D4 - ldr r1, [sp] - lsls r0, r1, 16 - asrs r0, 16 - str r0, [sp, 0x4] -_08148674: - mov r2, r8 - adds r5, r2, r6 - lsls r5, 1 - ldr r4, _08148708 @ =0x0201d000 - adds r3, r5, r4 - ldrh r2, [r3] - ldr r0, [sp, 0x4] - subs r1, r2, r0 - ldr r4, _0814870C @ =0x0201d400 - adds r5, r4 - ldrh r0, [r5] - mov r12, r0 - mov r4, r9 - lsls r0, r4, 16 - asrs r0, 16 - mov r4, r12 - subs r0, r4, r0 - lsls r4, r0, 16 - lsrs r4, 16 - lsls r1, 16 - asrs r1, 16 - adds r6, 0x1 - adds r0, r1, 0 - muls r0, r6 - adds r1, r7, 0 - str r2, [sp, 0x8] - str r3, [sp, 0xC] - bl __divsi3 - ldr r2, [sp, 0x8] - subs r2, r0 - ldr r3, [sp, 0xC] - strh r2, [r3] - lsls r4, 16 - asrs r4, 16 - adds r0, r4, 0 - muls r0, r6 - adds r1, r7, 0 - bl __divsi3 - ldrh r1, [r5] - subs r1, r0 - strh r1, [r5] - lsls r6, 16 - lsrs r6, 16 - subs r0, r7, 0x1 - cmp r6, r0 - blt _08148674 -_081486D4: - mov r1, r8 - adds r0, r1, r7 - lsls r0, 1 - mov r2, r10 - adds r1, r0, r2 - mov r3, sp - ldrh r3, [r3] - strh r3, [r1] - movs r1, 0x80 - lsls r1, 3 - add r1, r10 - adds r0, r1 - mov r4, r9 - strh r4, [r0] - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08148700: .4byte gUnknown_03005FA0 -_08148704: .4byte 0x0201cffe -_08148708: .4byte 0x0201d000 -_0814870C: .4byte 0x0201d400 - thumb_func_end sub_814862C thumb_func_start sub_8148710 sub_8148710: @ 8148710 diff --git a/include/pokeblock.h b/include/pokeblock.h index f78ed40c3..c04278c30 100644 --- a/include/pokeblock.h +++ b/include/pokeblock.h @@ -1,7 +1,8 @@ #ifndef GUARD_POKEBLOCK_H #define GUARD_POKEBLOCK_H -enum { +enum +{ PBLOCK_CLR_BLACK, PBLOCK_CLR_RED, PBLOCK_CLR_BLUE, @@ -10,15 +11,27 @@ enum { PBLOCK_CLR_YELLOW }; +enum +{ + PBLOCK_COLOR, + PBLOCK_SPICY, + PBLOCK_DRY, + PBLOCK_SWEET, + PBLOCK_BITTER, + PBLOCK_SOUR, + PBLOCK_FEEL, +}; + void sub_810B96C(void); u8 sub_810BA50(s16, s16, u8); u8 sub_810C9B0(struct Pokeblock *); -s16 sub_810CA9C(const struct Pokeblock *, u8); +s16 GetPokeblockData(const struct Pokeblock *, u8); u8 sub_810C9E8(struct Pokeblock *); void sub_810BA7C(u8); void ClearPokeblocks(void); -bool8 sub_810CA6C(u8); -s16 sub_810CAE4(u8, const struct Pokeblock *); +bool8 PokeblockClearIfExists(u8); +s16 PokeblockGetGain(u8, const struct Pokeblock *); u8 sub_810CB68(u8, u8*); +void PokeblockCopyName(struct Pokeblock *pokeblock, u8 *dest); #endif // GUARD_POKEBLOCK_H diff --git a/ld_script.txt b/ld_script.txt index babcf5861..31f9ea495 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -263,6 +263,7 @@ SECTIONS { src/mystery_event_menu.o(.text); src/save_failed_screen.o(.text); src/braille_puzzles.o(.text); + src/pokeblock_feed.o(.text); asm/pokeblock_feed.o(.text); src/clear_save_data_menu.o(.text); src/intro_credits_graphics.o(.text); diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c index 273191192..4eadaa78b 100644 --- a/src/mori_debug_menu.c +++ b/src/mori_debug_menu.c @@ -134,7 +134,7 @@ s8 MoriDebugMenu_PokeblockCase(void) s32 loopCounter; for (loopCounter = 0; loopCounter <= 39; loopCounter++) - sub_810CA6C(loopCounter); + PokeblockClearIfExists(loopCounter); CloseMenu(); return 1; diff --git a/src/pokeblock.c b/src/pokeblock.c index 775280f6e..2fb544fea 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -582,7 +582,7 @@ static void sub_810BDAC(bool8 flag) v0 = ((i % 3) << 6) + 0x1a1 + (i / 3) * 6; if (gUnknown_02039248.unk0 + gUnknown_02039248.unk1 != gUnknown_02039248.unk2) { - if (sub_810CA9C(&gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1], i + 1) > 0) + if (GetPokeblockData(&gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1], i + 1) > 0) { gBGTilemapBuffers[2][v0] = (i << 12) + 23; gBGTilemapBuffers[2][v0 + 32] = (i << 12) + 24; @@ -894,7 +894,7 @@ static void sub_810C5EC(u8 taskId) static void sub_810C610(u8 taskId) { MenuZeroFillWindowRect(7, 6, 13, 11); - sub_810CA6C((gUnknown_02039248.unk0 + gUnknown_02039248.unk1)); + PokeblockClearIfExists((gUnknown_02039248.unk0 + gUnknown_02039248.unk1)); StringExpandPlaceholders(gStringVar4, gContestStatsText_WasThrownAway); DisplayItemMessageOnField(taskId, gStringVar4, sub_810C704, 0); sub_810BC98(); @@ -942,9 +942,9 @@ static void sub_810C748(u8 taskId) static void sub_810C788(u8 taskId) { - s16 v0 = sub_810CAE4(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]); + s16 v0 = PokeblockGetGain(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]); StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); - sub_810CA6C(gScriptItemId); + PokeblockClearIfExists(gScriptItemId); gScriptItemId = gSaveBlock1.pokeblocks[gScriptItemId].color << 8; if (v0 == 0) { @@ -967,7 +967,7 @@ static void sub_810C854(u8 taskId) SafariZoneActivatePokeblockFeeder(gScriptItemId); StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); gScriptResult = gScriptItemId; - sub_810CA6C(gScriptItemId); + PokeblockClearIfExists(gScriptItemId); BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskId].func = sub_810C2C8; } @@ -1024,10 +1024,10 @@ u8 sub_810C9B0(struct Pokeblock *pokeblock) { u8 contestStat; u8 maxRating; - u8 rating = sub_810CA9C(pokeblock, 1); + u8 rating = GetPokeblockData(pokeblock, 1); for (contestStat=1; contestStat<5; contestStat++) { - maxRating = sub_810CA9C(pokeblock, contestStat + 1); + maxRating = GetPokeblockData(pokeblock, contestStat + 1); if (rating < maxRating) { rating = maxRating; @@ -1038,7 +1038,7 @@ u8 sub_810C9B0(struct Pokeblock *pokeblock) u8 sub_810C9E8(struct Pokeblock *pokeblock) { - u8 feel = sub_810CA9C(pokeblock, 6); + u8 feel = GetPokeblockData(pokeblock, 6); if (feel > 99) feel = 99; return feel; @@ -1068,7 +1068,7 @@ bool8 sub_810CA34(struct Pokeblock *pokeblock) return TRUE; } -bool8 sub_810CA6C(u8 pokeblockIdx) +bool8 PokeblockClearIfExists(u8 pokeblockIdx) { if (gSaveBlock1.pokeblocks[pokeblockIdx].color == 0) { @@ -1078,33 +1078,33 @@ bool8 sub_810CA6C(u8 pokeblockIdx) return TRUE; } -s16 sub_810CA9C(const struct Pokeblock *pokeblock, u8 field) +s16 GetPokeblockData(const struct Pokeblock *pokeblock, u8 field) { - if (field == 0) + if (field == PBLOCK_COLOR) return pokeblock->color; - if (field == 1) + if (field == PBLOCK_SPICY) return pokeblock->spicy; - if (field == 2) + if (field == PBLOCK_DRY) return pokeblock->dry; - if (field == 3) + if (field == PBLOCK_SWEET) return pokeblock->sweet; - if (field == 4) + if (field == PBLOCK_BITTER) return pokeblock->bitter; - if (field == 5) + if (field == PBLOCK_SOUR) return pokeblock->sour; - if (field == 6) + if (field == PBLOCK_FEEL) return pokeblock->feel; return 0; } -s16 sub_810CAE4(u8 nature, const struct Pokeblock *pokeblock) +s16 PokeblockGetGain(u8 nature, const struct Pokeblock *pokeblock) { u8 flavor; s16 curGain; s16 totalGain = 0; for (flavor=0; flavor<5; flavor++) { - curGain = sub_810CA9C(pokeblock, flavor + 1); + curGain = GetPokeblockData(pokeblock, flavor + 1); if (curGain > 0) { totalGain += curGain * gPokeblockFlavorCompatibilityTable[5 * nature + flavor]; @@ -1113,9 +1113,9 @@ s16 sub_810CAE4(u8 nature, const struct Pokeblock *pokeblock) return totalGain; } -void sub_810CB44(struct Pokeblock *pokeblock, u8 *dest) +void PokeblockCopyName(struct Pokeblock *pokeblock, u8 *dest) { - u8 color = sub_810CA9C(pokeblock, 0); + u8 color = GetPokeblockData(pokeblock, PBLOCK_COLOR); StringCopy(dest, gPokeblockNames[color]); } @@ -1124,7 +1124,7 @@ bool8 sub_810CB68(u8 nature, u8 *dest) u8 flavor; for (flavor=0; flavor<5; flavor++) { - if (sub_810CAE4(nature, &gUnknown_083F7F9C[flavor]) > 0) + if (PokeblockGetGain(nature, &gUnknown_083F7F9C[flavor]) > 0) { StringCopy(dest, gPokeblockNames[flavor + 1]); return TRUE; diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c new file mode 100644 index 000000000..f99eca690 --- /dev/null +++ b/src/pokeblock_feed.c @@ -0,0 +1,577 @@ +#include "global.h" +#include "task.h" +#include "palette.h" +#include "main.h" +#include "menu_helpers.h" +#include "text.h" +#include "text_window.h" +#include "menu.h" +#include "rom4.h" +#include "decompress.h" +#include "data2.h" +#include "sprite.h" +#include "item_use.h" +#include "pokeblock.h" +#include "party_menu.h" +#include "strings.h" +#include "string_util.h" +#include "m4a.h" +#include "field_effect.h" +#include "sound.h" +#include "trig.h" + +extern u8 ewram[]; +extern struct MusicPlayerInfo gMPlay_BGM; +extern u8 gPokeblockMonID; +extern s16 gPokeblockGain; +extern struct CompressedSpritePalette sPokeblockFeedSpritePal; + +void sub_8147F4C(u8 taskID); +bool8 sub_8040A3C(u16 species); + +// IWRAM common + +extern const struct CompressedSpriteSheet gUnknown_083F7F74; +extern const struct CompressedSpriteSheet gUnknown_084121DC; +extern const struct CompressedSpritePalette gUnknown_083F7F7C; +extern const u8 gBattleTerrainTiles_Building[]; +extern const u8 gUnknown_08E782FC[]; +extern const u8 gBattleTerrainPalette_BattleTower[]; +extern const u8* const gUnknown_084120A4[]; +extern const union AffineAnimCmd* const gSpriteAffineAnimTable_84120EC[]; +extern const union AffineAnimCmd* const gSpriteAffineAnimTable_84121A0[]; +extern const union AffineAnimCmd* const gSpriteAffineAnimTable_84121A4[]; +extern const union AffineAnimCmd* const gSpriteAffineAnimTable_84121A8[]; +extern const union AffineAnimCmd* const gSpriteAffineAnimTable_8412050[]; +extern const struct SpriteTemplate gSpriteTemplate_84121E4; +extern const u8 gNatureToMonPokeblockAnim[][2]; +extern const s16 gMonPokeblockAnims[][10]; + +// this file's functions +void sub_8147B04(void); +void sub_81481DC(void); +void sub_814825C(void); +u8 sub_81480B4(void); +u8 sub_814817C(void); +u8 sub_8147F84(struct Pokemon* mon); +bool8 sub_8147B20(struct Pokemon* mon); +void sub_8147DDC(u8); +void sub_8148044(u8); +void sub_8148078(struct Sprite* sprite); +void Task_PrintAtePokeblockText(u8 taskID); +void SetPokeblockFeedSpritePal(u8); +void sub_8148108(u8, bool8); +bool8 sub_8148540(void); +bool8 sub_81485CC(void); +static bool8 FreePokeSpriteMatrix(void); +void sub_8148710(void); +void sub_814862C(void); + +void sub_8147890(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + UpdatePaletteFade(); +} + +void sub_81478A8(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +bool8 sub_81478BC(void) +{ + switch (gMain.state) + { + case 0: + sub_80F9438(); + sub_80F9368(); + sub_8147B04(); + gMain.state++; + break; + case 1: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = 1; + gMain.state++; + break; + case 2: + ResetSpriteData(); + gMain.state++; + break; + case 3: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 4: + SetUpWindowConfig(&gWindowConfig_81E6E50); + gMain.state++; + break; + case 5: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6E50); + gMain.state++; + break; + case 6: + if (MultistepInitMenuWindowContinue()) + { + ewram[0x1FFFF] = 0; + gMain.state++; + } + break; + case 7: + if (sub_8147B20(&gPlayerParty[gPokeblockMonID])) + { + gMain.state++; + } + break; + case 8: + ewram[0x1FFFD] = sub_81480B4(); + gMain.state++; + break; + case 9: + ewram[0x1FFFE] = sub_8147F84(&gPlayerParty[gPokeblockMonID]); + gMain.state++; + break; + case 10: + MenuDrawTextWindow(0, 14, 29, 19); + gMain.state++; + break; + case 11: + if (sub_8055870() != 1) + { + gMain.state++; + } + break; + case 12: + { + u16 savedIME = REG_IME; + REG_IME = 0; + REG_IE |= 1; + REG_IME = savedIME; + REG_DISPSTAT |= 8; + SetVBlankCallback(sub_81478A8); + gMain.state++; + } + case 13: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + gPaletteFade.bufferTransferDisabled = 0; + SetMainCallback2(sub_8147890); + return 1; + } + return 0; +} + +void sub_8147ADC(void) +{ + while (1) + { + if (sub_81478BC() == 1) + { + sub_8147DDC(1); + break; + } + if (sub_80F9344() == 1) + break; + } +} + +void sub_8147B04(void) +{ + REG_BG1CNT = 0x1D02l; + REG_DISPCNT = 0x1340; +} + +bool8 sub_8147B20(struct Pokemon* mon) +{ + u16 species; + u32 PiD, TiD; + switch (ewram[0x1FFFF]) + { + case 0: + species = GetMonData(mon, MON_DATA_SPECIES2); + PiD = GetMonData(mon, MON_DATA_PERSONALITY); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_081FAF4C[1], species, PiD); + ewram[0x1FFFF]++; + break; + case 1: + { + const struct CompressedSpritePalette* palette; + + species = GetMonData(mon, MON_DATA_SPECIES2); + PiD = GetMonData(mon, MON_DATA_PERSONALITY); + TiD = GetMonData(mon, MON_DATA_OT_ID); + palette = sub_80409C8(species, TiD, PiD); + LoadCompressedObjectPalette(palette); + GetMonSpriteTemplate_803C56C(palette->tag, 1); + ewram[0x1FFFF]++; + } + break; + case 2: + LoadCompressedObjectPic(&gUnknown_083F7F74); + ewram[0x1FFFF]++; + break; + case 3: + LoadCompressedObjectPalette(&gUnknown_083F7F7C); + ewram[0x1FFFF]++; + break; + case 4: + LoadCompressedObjectPic(&gUnknown_084121DC); + ewram[0x1FFFF]++; + break; + case 5: + SetPokeblockFeedSpritePal(gScriptItemId); + LoadCompressedObjectPalette(&sPokeblockFeedSpritePal); + ewram[0x1FFFF]++; + break; + case 6: + LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM)); + ewram[0x1FFFF]++; + break; + case 7: + LZDecompressVram(gUnknown_08E782FC, (void*)(VRAM + 0xE800)); + ewram[0x1FFFF]++; + break; + case 8: + LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); + ewram[0x1FFFF] = 0; + return 1; + } + return 0; +} + +void SetPokeblockFeedSpritePal(u8 pkbID) +{ + u8 color = GetPokeblockData(&gSaveBlock1.pokeblocks[pkbID], PBLOCK_COLOR); + sPokeblockFeedSpritePal.data = gUnknown_084120A4[color - 1]; + sPokeblockFeedSpritePal.tag = 0x39E2; +} + +extern u16 gUnknown_03005F94; +extern u16 gUnknown_03005F34; +extern u8 gUnknown_03005F3C; + +void sub_8147CC8(u8 taskID) +{ + if (!gPaletteFade.active) + { + switch (gTasks[taskID].data[0]) + { + case 0: + gUnknown_03005F3C = 0; + gUnknown_03005F94 = 0; + sub_81481DC(); + break; + case 255: + sub_8148108(ewram[0x1FFFD], gTasks[taskID].data[1]); + break; + case 269: + ewram[0x1FFFC] = sub_814817C(); + break; + case 281: + sub_8148044(ewram[0x1FFFE]); + break; + case 297: + gTasks[taskID].func = Task_PrintAtePokeblockText; + return; + } + if (gUnknown_03005F94 < gUnknown_03005F34) + sub_814825C(); + else if (gUnknown_03005F94 == gUnknown_03005F34) + gTasks[taskID].data[0] = 254; + + gUnknown_03005F94++; + gTasks[taskID].data[0]++; + } +} + +void sub_8147DDC(u8 a0) +{ + u8 taskID = CreateTask(sub_8147CC8, 0); + gTasks[taskID].data[0] = 0; + gTasks[taskID].data[1] = a0; +} + +void sub_8147E10(u8 taskID) +{ + if (MenuUpdateWindowText() == 1) + gTasks[taskID].func = sub_8147F4C; +} + +void Task_PrintAtePokeblockText(u8 taskID) +{ + struct Pokemon* mon = &gPlayerParty[gPokeblockMonID]; + struct Pokeblock* pokeblock = &gSaveBlock1.pokeblocks[gScriptItemId]; + + gPokeblockGain = PokeblockGetGain(GetNature(mon), pokeblock); + GetMonNickname(mon, gStringVar1); + PokeblockCopyName(pokeblock, gStringVar2); + + if (gPokeblockGain == 0) + StringExpandPlaceholders(gStringVar4, gContestStatsText_NormallyAte); + else if (gPokeblockGain > 0) + StringExpandPlaceholders(gStringVar4, gContestStatsText_HappilyAte); + else + StringExpandPlaceholders(gStringVar4, gContestStatsText_DisdainfullyAte); + + MenuPrintMessage(gStringVar4, 1, 15); + gTasks[taskID].func = sub_8147E10; +} + +void sub_8147F08(u8 taskID) +{ + if (!gPaletteFade.active) + { + m4aMPlayVolumeControl(&gMPlay_BGM, -1, 256); + SetMainCallback2(gMain.savedCallback); + DestroyTask(taskID); + } +} + +void sub_8147F4C(u8 taskID) +{ + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskID].func = sub_8147F08; +} + +extern u16 gPokeblockFeedMonSpecies; +extern u8 gPokeblockFeedMonSpriteID; +extern u8 gPokeblockFeedMonNature; +extern bool8 gPokeblockMonNotFlipped; + +u8 sub_8147F84(struct Pokemon* mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2); + u8 spriteID = CreateSprite(&gUnknown_02024E8C, 48, 80, 2); + + gPokeblockFeedMonSpecies = species; + gPokeblockFeedMonSpriteID = spriteID; + gPokeblockFeedMonNature = GetNature(mon); + gSprites[spriteID].data2 = species; + gSprites[spriteID].callback = SpriteCallbackDummy; + gPokeblockMonNotFlipped = 1; + if (!sub_8040A3C(species)) + { + gSprites[spriteID].affineAnims = gSpriteAffineAnimTable_84120EC; + gSprites[spriteID].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[spriteID], gSprites[spriteID].oam.shape, gSprites[spriteID].oam.size, gSprites[spriteID].oam.affineMode); + gPokeblockMonNotFlipped = 0; + } + return spriteID; +} + +void sub_8148044(u8 spriteID) +{ + gSprites[spriteID].pos1.x = 48; + gSprites[spriteID].pos1.y = 80; + gSprites[spriteID].data0 = -8; + gSprites[spriteID].data1 = 1; + gSprites[spriteID].callback = sub_8148078; +} + +void sub_8148078(struct Sprite* sprite) +{ + sprite->pos1.x += 4; + sprite->pos1.y += sprite->data0; + sprite->data0 += sprite->data1; + if (sprite->data0 == 0) + PlayCry1(sprite->data2, 0); + if (sprite->data0 == 9) + sprite->callback = SpriteCallbackDummy; +} + +u8 sub_81480B4(void) +{ + u8 spriteID = sub_810BA50(188, 100, 2); + gSprites[spriteID].oam.affineMode = 1; + gSprites[spriteID].affineAnims = gSpriteAffineAnimTable_84121A0; + gSprites[spriteID].callback = SpriteCallbackDummy; + InitSpriteAffineAnim(&gSprites[spriteID]); + return spriteID; +} + +void sub_8148108(u8 spriteID, bool8 a1) +{ + FreeOamMatrix(gSprites[spriteID].oam.matrixNum); + gSprites[spriteID].oam.affineMode = 3; + if (!a1) + gSprites[spriteID].affineAnims = gSpriteAffineAnimTable_84121A4; + else + gSprites[spriteID].affineAnims = gSpriteAffineAnimTable_84121A8; + InitSpriteAffineAnim(&gSprites[spriteID]); +} + +u8 sub_814817C(void) +{ + u8 spriteID = CreateSprite(&gSpriteTemplate_84121E4, 174, 84, 1); + gSprites[spriteID].data0 = -12; + gSprites[spriteID].data1 = 1; + return spriteID; +} + +void sub_81481B0(struct Sprite* sprite) +{ + sprite->pos1.x -= 4; + sprite->pos1.y += sprite->data0; + sprite->data0 += sprite->data1; + if (sprite->data0 == 10) + DestroySprite(sprite); +} + +void sub_81481DC(void) +{ + u8 animID, i; + + gUnknown_03005F34 = 1; + animID = gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][0]; + for (i = 0; i < 8; i++, animID++) + { + gUnknown_03005F34 += gMonPokeblockAnims[animID][4]; + if (gMonPokeblockAnims[animID][9] == 1) + break; + } +} + +extern struct Sprite gPokeblockFeedPokeSpriteCopy; +extern struct Sprite* gPokeblockFeedPokeSprite; +extern u8 gUnknown_03005F40; +extern s16 gUnknown_03005FA0[]; + +void sub_814825C(void) +{ + switch (gUnknown_03005F3C) + { + case 0: + gUnknown_03005F40 = gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][0]; + gPokeblockFeedPokeSprite = &gSprites[gPokeblockFeedMonSpriteID]; + gPokeblockFeedPokeSpriteCopy = *gPokeblockFeedPokeSprite; + gUnknown_03005F3C = 10; + break; + case 1 ... 9: + break; + case 10: + sub_8148540(); + if (gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] != 0) + { + gPokeblockFeedPokeSprite->oam.affineMode = 3; + gPokeblockFeedPokeSprite->oam.matrixNum = 0; + gPokeblockFeedPokeSprite->affineAnims = gSpriteAffineAnimTable_8412050; + InitSpriteAffineAnim(gPokeblockFeedPokeSprite); + } + gUnknown_03005F3C = 50; + case 50: + if (gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] != 0) + { + if (gPokeblockMonNotFlipped == 0) + StartSpriteAffineAnim(gPokeblockFeedPokeSprite, gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] + 10); + else + StartSpriteAffineAnim(gPokeblockFeedPokeSprite, gNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1]); + } + gUnknown_03005F3C = 60; + break; + case 60: + if (sub_81485CC() == 1) + { + if (gUnknown_03005FA0[9] == 0) + { + gUnknown_03005F40++; + sub_8148540(); + gUnknown_03005F3C = 60; + } + else + { + FreeOamMatrix(gPokeblockFeedPokeSprite->oam.matrixNum); + gUnknown_03005F3C = 70; + } + } + break; + case 70: + FreePokeSpriteMatrix(); + gUnknown_03005F40 = 0; + gUnknown_03005F3C = 0; + break; + case 71 ... 90: + break; + } +} + +bool8 sub_8148540(void) +{ + u8 i; + for (i = 0; i < 10; i++) + gUnknown_03005FA0[i] = gMonPokeblockAnims[gUnknown_03005F40][i]; + if (gUnknown_03005FA0[4] == 0) + return 1; + else + { + gUnknown_03005FA0[10] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2]); + gUnknown_03005FA0[11] = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3]); + gUnknown_03005FA0[12] = gUnknown_03005FA0[4]; + gUnknown_03005FA0[13] = gPokeblockFeedPokeSprite->pos2.x; + gUnknown_03005FA0[14] = gPokeblockFeedPokeSprite->pos2.y; + sub_8148710(); + gUnknown_03005FA0[4] = gUnknown_03005FA0[12]; + sub_814862C(); + gUnknown_03005FA0[4] = gUnknown_03005FA0[12]; + return 0; + } +} + +bool8 sub_81485CC(void) +{ + u16 var = gUnknown_03005FA0[12] - gUnknown_03005FA0[4]; + + gPokeblockFeedPokeSprite->pos2.x = (u16)(*((u16*)(&ewram[0x1D000]) + var)); + gPokeblockFeedPokeSprite->pos2.y = (u16)(*((u16*)(&ewram[0x1D400]) + var)); + + if (--gUnknown_03005FA0[4] == 0) + return 1; + else + return 0; +} + +static bool8 FreePokeSpriteMatrix(void) +{ + FreeSpriteOamMatrix(gPokeblockFeedPokeSprite); + return 0; +} + +void sub_814862C(void) +{ + u16 i; + u16 r8 = gUnknown_03005FA0[8]; + u16 r7 = gUnknown_03005FA0[12] - r8; + s16 var3 = gUnknown_03005FA0[13] + gUnknown_03005FA0[6]; + s16 r9 = gUnknown_03005FA0[14] + gUnknown_03005FA0[7]; + + for (i = 0; i < r7 - 1; i++) + { + s16* r3 = (((u16*)(&ewram[0x1D000]) + (r8 + i))); + s16 r1 = *r3 - (var3); + + s16* r5 = (((u16*)(&ewram[0x1D400]) + (r8 + i))); + s16 r4 = *r5 - r9; + + *r3 -= r1 * (i + 1) / r7; + *r5 -= r4 * (i + 1) / r7; + } + + *((u16*)(&ewram[0x1CFFE]) + (r8 + r7)) = var3; + *((u16*)(&ewram[0x1D3FE]) + (r8 + r7)) = r9; +} + +/* +void sub_8148710(void) +{ + bool8 var_24 = 0; + s16 r8 = gUnknown_03005FA0[13] - gUnknown_03005FA0[10]; + s16 r7 = gUnknown_03005FA0[14] - gUnknown_03005FA0[11]; + s16 r5; + if (gUnknown_03005FA0[10] < 0) + r5 = -(gUnknown_03005FA0[10]) - gUnknown_03005FA0[3]; + else + r5 = (gUnknown_03005FA0[10]) - gUnknown_03005FA0[3]; + if (gUnknown_03005FA0) +} +*/ diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 3aa2f1fa5..19d2e4399 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -105,8 +105,8 @@ asm(".text\n" static EWRAM_DATA struct UnkPokenavStruct_Sub1 *gUnknown_02039304 = NULL; static EWRAM_DATA MainCallback gUnknown_02039308 = NULL; static EWRAM_DATA struct Pokeblock *gUnknown_0203930C = NULL; -EWRAM_DATA u8 gUnknown_02039310 = 0; -EWRAM_DATA s16 gUnknown_02039312 = 0; +EWRAM_DATA u8 gPokeblockMonID = 0; +EWRAM_DATA s16 gPokeblockGain = 0; extern u16 gKeyRepeatStartDelay; extern u16 gScriptItemId; // FIXME: remove after merge of #349 Pokeblock @@ -155,8 +155,8 @@ void sub_8136174(void) { gUnknown_02039304->pokeblock = gUnknown_0203930C; gUnknown_02039304->callback = gUnknown_02039308; - gUnknown_02039310 = sub_81370E4(gUnknown_02039310); - gUnknown_02039304->unk56 = gUnknown_02039310 < 4 ? 0 : 1; + gPokeblockMonID = sub_81370E4(gPokeblockMonID); + gUnknown_02039304->unk56 = gPokeblockMonID < 4 ? 0 : 1; gUnknown_083DFEC4->unkD162[0] = 2; launch_c3_walk_stairs_and_run_once(sub_8136294); SetMainCallback2(sub_81361E4); @@ -469,7 +469,7 @@ void sub_8136808(void) switch (gUnknown_02039304->unk50) { case 0: - gUnknown_02039310 = sub_81370A4(gUnknown_083DFEC4->unk87DC); + gPokeblockMonID = sub_81370A4(gUnknown_083DFEC4->unk87DC); gUnknown_02039308 = gUnknown_02039304->callback; gUnknown_0203930C = gUnknown_02039304->pokeblock; BeginNormalPaletteFade(-1, 0, 0, 16, 0); @@ -490,7 +490,7 @@ void sub_81368A4(void) switch (gUnknown_02039304->unk50) { case 0: - if (gUnknown_083DFEC4->unk87DC != gUnknown_02039310) + if (gUnknown_083DFEC4->unk87DC != gPokeblockMonID) { sub_80F5060(gUnknown_02039304->unk56); gUnknown_02039304->unk50++; @@ -578,7 +578,7 @@ void sub_81369CC(void) case 5: if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8136D00()) { - sub_810CA6C((u8)gScriptItemId); + PokeblockClearIfExists((u8)gScriptItemId); launch_c3_walk_stairs_and_run_once(sub_8136B44); } break; @@ -864,9 +864,9 @@ void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon) gUnknown_02039304->unk66[2] = pokeblock->bitter; gUnknown_02039304->unk66[3] = pokeblock->sweet; gUnknown_02039304->unk66[4] = pokeblock->dry; - if (gUnknown_02039312 > 0) + if (gPokeblockGain > 0) direction = 1; - else if (gUnknown_02039312 < 0) + else if (gPokeblockGain < 0) direction = -1; else return; diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 96f47c067..7001c2eaa 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -3161,7 +3161,7 @@ static u8 PickWildMonNature(void) } for (i = 0; i < 25; i++) { - if (sub_810CAE4(natures[i], safariPokeblock) > 0) + if (PokeblockGetGain(natures[i], safariPokeblock) > 0) return natures[i]; } } diff --git a/sym_common.txt b/sym_common.txt index fc729a587..f4a5bfb48 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -295,19 +295,19 @@ gUnknown_03005F14: @ 3005F14 @ pokeblock_feed -gUnknown_03005F20: @ 3005F20 +gPokeblockFeedPokeSprite: @ 3005F20 .space 0x4 -gUnknown_03005F24: @ 3005F24 +gPokeblockFeedMonSpecies: @ 3005F24 .space 0x4 -gUnknown_03005F28: @ 3005F28 +gPokeblockMonNotFlipped: @ 3005F28 .space 0x4 -gUnknown_03005F2C: @ 3005F2C +gPokeblockFeedMonSpriteID: @ 3005F2C .space 0x4 -gUnknown_03005F30: @ 3005F30 +gPokeblockFeedMonNature: @ 3005F30 .space 0x4 gUnknown_03005F34: @ 3005F34 @@ -319,7 +319,7 @@ gUnknown_03005F3C: @ 3005F3C gUnknown_03005F40: @ 3005F40 .space 0x10 -gUnknown_03005F50: @ 3005F50 +gPokeblockFeedPokeSpriteCopy: @ 3005F50 .space 0x44 gUnknown_03005F94: @ 3005F94 diff --git a/sym_ewram.txt b/sym_ewram.txt index 0e8b25e28..d43a6d52d 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -678,7 +678,7 @@ gUnknown_0203931C: @ 203931C @ pokeblock_feed .align 2 -gUnknown_02039350: @ 2039350 +sPokeblockFeedSpritePal: @ 2039350 .space 0x8 @ intro_credits_graphics |