diff options
-rw-r--r-- | asm/fldeff_80C5CD4.s | 2766 | ||||
-rwxr-xr-x | asm/fldeff_berrytree.s | 164 | ||||
-rwxr-xr-x | asm/fldeff_decoration.s | 907 | ||||
-rwxr-xr-x | asm/fldeff_pc.s | 190 | ||||
-rwxr-xr-x | asm/fldeff_poison.s | 99 | ||||
-rwxr-xr-x | asm/fldeff_recordmixing.s | 94 | ||||
-rwxr-xr-x | asm/fldeff_secretpower.s | 640 | ||||
-rwxr-xr-x | asm/pss_effect.s | 726 | ||||
-rwxr-xr-x | data/fldeff_decoration.s | 36 | ||||
-rwxr-xr-x | data/fldeff_recordmixing.s | 45 | ||||
-rwxr-xr-x[-rw-r--r--] | data/fldeff_secretpower.s (renamed from data/fldeff_80C5CD4.s) | 112 | ||||
-rwxr-xr-x | data/pss_effect.s | 43 | ||||
-rw-r--r-- | ld_script.txt | 13 |
13 files changed, 2955 insertions, 2880 deletions
diff --git a/asm/fldeff_80C5CD4.s b/asm/fldeff_80C5CD4.s deleted file mode 100644 index 011ce6427..000000000 --- a/asm/fldeff_80C5CD4.s +++ /dev/null @@ -1,2766 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80C5CD4 -sub_80C5CD4: @ 80C5CD4 - push {r4-r7,lr} - sub sp, 0x28 - adds r7, r0, 0 - ldr r0, _080C5D64 @ =gUnknown_083D1898 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x18] - str r1, [sp, 0x1C] - ldr r0, _080C5D68 @ =gUnknown_083D18A0 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x20] - str r1, [sp, 0x24] - mov r1, sp - ldr r0, _080C5D6C @ =gSpriteTemplate_83D18A8 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldrh r3, [r7] - lsls r2, r3, 16 - add r0, sp, 0x18 - ldrh r1, [r0, 0x4] - orrs r1, r2 - str r1, [r0, 0x4] - mov r1, sp - movs r6, 0 - strh r3, [r1] - ldrh r2, [r7, 0x2] - ldr r5, _080C5D70 @ =0xffff0000 - add r4, sp, 0x20 - ldr r1, [r4, 0x4] - ands r1, r5 - orrs r1, r2 - str r1, [r4, 0x4] - mov r1, sp - strh r2, [r1, 0x2] - bl LoadSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette - movs r0, 0x1 - strh r0, [r7, 0xC] - strh r6, [r7, 0xA] - strh r6, [r7, 0x8] - ldrh r0, [r7, 0x2] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x80 - lsls r1, 9 - lsls r1, r0 - bics r5, r1 - str r5, [r7, 0x10] - ldrh r0, [r7, 0x4] - cmp r0, 0 - bne _080C5D4E - movs r0, 0x10 - strh r0, [r7, 0x4] -_080C5D4E: - ldrh r0, [r7, 0x6] - cmp r0, 0 - bne _080C5D58 - movs r0, 0x14 - strh r0, [r7, 0x6] -_080C5D58: - ldr r0, _080C5D74 @ =gUnknown_020387EC - str r7, [r0] - movs r4, 0 - ldr r5, _080C5D78 @ =gSprites - b _080C5D94 - .align 2, 0 -_080C5D64: .4byte gUnknown_083D1898 -_080C5D68: .4byte gUnknown_083D18A0 -_080C5D6C: .4byte gSpriteTemplate_83D18A8 -_080C5D70: .4byte 0xffff0000 -_080C5D74: .4byte gUnknown_020387EC -_080C5D78: .4byte gSprites -_080C5D7C: - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r1, [r7, 0x4] - cmp r4, 0x3 - bhi _080C5D8C - negs r1, r1 -_080C5D8C: - strh r1, [r0, 0x2E] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 -_080C5D94: - cmp r4, 0x7 - bhi _080C5DB2 - lsls r1, r4, 5 - adds r1, 0x8 - lsls r1, 16 - asrs r1, 16 - mov r0, sp - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - bne _080C5D7C -_080C5DB2: - ldr r1, _080C5DC8 @ =REG_BLDCNT - movs r0, 0xBF - strh r0, [r1] - adds r1, 0x4 - movs r0, 0x10 - strh r0, [r1] - add sp, 0x28 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5DC8: .4byte REG_BLDCNT - thumb_func_end sub_80C5CD4 - - thumb_func_start sub_80C5DCC -sub_80C5DCC: @ 80C5DCC - push {r4,lr} - ldr r4, _080C5E10 @ =gUnknown_020387EC - ldr r1, [r4] - ldrh r0, [r1, 0x8] - cmp r0, 0 - bne _080C5DF0 - ldr r0, [r1, 0x10] - ldr r2, _080C5E14 @ =0x0000ffff - movs r1, 0x10 - bl BlendPalettes - ldr r0, _080C5E18 @ =sub_80C603C - bl sub_80C61B0 - ldr r1, [r4] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] -_080C5DF0: - ldr r1, [r4] - ldrh r0, [r1, 0xA] - cmp r0, 0x7 - bls _080C5E0A - ldrh r0, [r1, 0x6] - ldrh r2, [r1, 0xC] - adds r0, r2 - movs r2, 0 - strh r0, [r1, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4F - bgt _080C5E1C -_080C5E0A: - movs r0, 0 - b _080C5E2E - .align 2, 0 -_080C5E10: .4byte gUnknown_020387EC -_080C5E14: .4byte 0x0000ffff -_080C5E18: .4byte sub_80C603C -_080C5E1C: - movs r0, 0x50 - strh r0, [r1, 0xC] - ldr r0, _080C5E34 @ =REG_BLDCNT - strh r2, [r0] - adds r0, 0x4 - strh r2, [r0] - bl ClearGpuRegBits - movs r0, 0x1 -_080C5E2E: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C5E34: .4byte REG_BLDCNT - thumb_func_end sub_80C5DCC - - thumb_func_start sub_80C5E38 -sub_80C5E38: @ 80C5E38 - push {r4-r7,lr} - sub sp, 0x28 - adds r7, r0, 0 - ldr r0, _080C5EC8 @ =gUnknown_083D1898 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x18] - str r1, [sp, 0x1C] - ldr r0, _080C5ECC @ =gUnknown_083D18A0 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x20] - str r1, [sp, 0x24] - mov r1, sp - ldr r0, _080C5ED0 @ =gSpriteTemplate_83D18C0 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldrh r3, [r7] - lsls r2, r3, 16 - add r0, sp, 0x18 - ldrh r1, [r0, 0x4] - orrs r1, r2 - str r1, [r0, 0x4] - mov r1, sp - movs r6, 0 - strh r3, [r1] - ldrh r2, [r7, 0x2] - ldr r5, _080C5ED4 @ =0xffff0000 - add r4, sp, 0x20 - ldr r1, [r4, 0x4] - ands r1, r5 - orrs r1, r2 - str r1, [r4, 0x4] - mov r1, sp - strh r2, [r1, 0x2] - bl LoadSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette - movs r0, 0x50 - strh r0, [r7, 0xC] - strh r6, [r7, 0x8] - strh r6, [r7, 0xA] - ldrh r0, [r7, 0x2] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x80 - lsls r1, 9 - lsls r1, r0 - bics r5, r1 - str r5, [r7, 0x10] - ldrh r0, [r7, 0x4] - cmp r0, 0 - bne _080C5EB2 - movs r0, 0x10 - strh r0, [r7, 0x4] -_080C5EB2: - ldrh r0, [r7, 0x6] - cmp r0, 0 - bne _080C5EBC - movs r0, 0x14 - strh r0, [r7, 0x6] -_080C5EBC: - ldr r0, _080C5ED8 @ =gUnknown_020387EC - str r7, [r0] - movs r5, 0 - ldr r6, _080C5EDC @ =gSprites - b _080C5F4A - .align 2, 0 -_080C5EC8: .4byte gUnknown_083D1898 -_080C5ECC: .4byte gUnknown_083D18A0 -_080C5ED0: .4byte gSpriteTemplate_83D18C0 -_080C5ED4: .4byte 0xffff0000 -_080C5ED8: .4byte gUnknown_020387EC -_080C5EDC: .4byte gSprites -_080C5EE0: - lsls r2, r3, 4 - adds r1, r2, r3 - lsls r1, 2 - adds r1, r6 - ldrh r0, [r7, 0x4] - strh r0, [r1, 0x2E] - movs r0, 0x1 - strh r0, [r1, 0x30] - ldr r1, _080C5EF4 @ =gSprites - b _080C5F2A - .align 2, 0 -_080C5EF4: .4byte gSprites -_080C5EF8: - lsls r1, r5, 21 - movs r0, 0x80 - lsls r0, 16 - adds r1, r0 - asrs r1, 16 - mov r0, sp - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x40 - beq _080C5F6E - lsls r2, r3, 4 - adds r1, r2, r3 - lsls r1, 2 - adds r1, r6 - ldrh r0, [r7, 0x4] - negs r0, r0 - strh r0, [r1, 0x2E] - ldr r0, _080C5F88 @ =0x0000ffff - strh r0, [r1, 0x30] - ldr r1, _080C5F8C @ =gSprites - lsls r4, r5, 5 -_080C5F2A: - adds r0, r2, r3 - lsls r0, 2 - adds r0, r1 - adds r1, r4, 0 - adds r1, 0x8 - movs r2, 0 - strh r1, [r0, 0x32] - strh r2, [r0, 0x36] - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_080C5F4A: - cmp r5, 0x7 - bhi _080C5F6E - cmp r5, 0x3 - bhi _080C5EF8 - lsls r4, r5, 5 - adds r1, r4, 0 - subs r1, 0x70 - lsls r1, 16 - asrs r1, 16 - mov r0, sp - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x40 - bne _080C5EE0 -_080C5F6E: - ldr r1, _080C5F90 @ =REG_BLDCNT - movs r0, 0xFF - strh r0, [r1] - adds r1, 0x4 - movs r0, 0x10 - strh r0, [r1] - ldr r0, _080C5F94 @ =sub_80C6078 - bl sub_80C61B0 - add sp, 0x28 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C5F88: .4byte 0x0000ffff -_080C5F8C: .4byte gSprites -_080C5F90: .4byte REG_BLDCNT -_080C5F94: .4byte sub_80C6078 - thumb_func_end sub_80C5E38 - - thumb_func_start sub_80C5F98 -sub_80C5F98: @ 80C5F98 - push {r4,lr} - ldr r4, _080C5FB0 @ =gUnknown_020387EC - ldr r2, [r4] - ldrh r0, [r2, 0x8] - cmp r0, 0x1 - beq _080C5FEC - cmp r0, 0x1 - bgt _080C5FB4 - cmp r0, 0 - beq _080C5FBA - b _080C602C - .align 2, 0 -_080C5FB0: .4byte gUnknown_020387EC -_080C5FB4: - cmp r0, 0x2 - beq _080C6008 - b _080C602C -_080C5FBA: - ldrh r0, [r2, 0xC] - ldrh r1, [r2, 0x6] - subs r0, r1 - strh r0, [r2, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - bgt _080C6034 - ldr r0, [r2, 0x10] - ldr r2, _080C5FE4 @ =0x0000ffff - movs r1, 0x10 - bl BlendPalettes - ldr r0, _080C5FE8 @ =sub_80C603C - bl SetHBlankCallback - ldr r1, [r4] - movs r0, 0x1 - strh r0, [r1, 0xC] - b _080C6000 - .align 2, 0 -_080C5FE4: .4byte 0x0000ffff -_080C5FE8: .4byte sub_80C603C -_080C5FEC: - ldrh r0, [r2, 0xA] - cmp r0, 0x8 - bne _080C6034 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - ldr r1, [r4] -_080C6000: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _080C6034 -_080C6008: - ldr r0, _080C6030 @ =REG_BLDCNT - movs r1, 0 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - ldrh r0, [r2] - bl FreeSpriteTilesByTag - ldr r0, [r4] - ldrh r0, [r0, 0x2] - bl FreeSpritePaletteByTag - bl ClearGpuRegBits - ldr r1, [r4] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] -_080C602C: - movs r0, 0x1 - b _080C6036 - .align 2, 0 -_080C6030: .4byte REG_BLDCNT -_080C6034: - movs r0, 0 -_080C6036: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C5F98 - - thumb_func_start sub_80C603C -sub_80C603C: @ 80C603C - push {lr} - sub sp, 0x4 - mov r2, sp - ldr r0, _080C6060 @ =REG_VCOUNT - ldrh r1, [r0] - movs r3, 0xFF - adds r0, r3, 0 - ands r0, r1 - strh r0, [r2] - mov r0, sp - ldrh r0, [r0] - cmp r0, 0x50 - bne _080C6068 - ldr r1, _080C6064 @ =REG_BLDCNT - movs r0, 0x8F - strh r0, [r1] - b _080C606C - .align 2, 0 -_080C6060: .4byte REG_VCOUNT -_080C6064: .4byte REG_BLDCNT -_080C6068: - ldr r0, _080C6074 @ =REG_BLDCNT - strh r3, [r0] -_080C606C: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080C6074: .4byte REG_BLDCNT - thumb_func_end sub_80C603C - - thumb_func_start sub_80C6078 -sub_80C6078: @ 80C6078 - push {lr} - sub sp, 0x4 - mov r2, sp - ldr r0, _080C60B0 @ =REG_VCOUNT - ldrh r1, [r0] - movs r0, 0xFF - ands r0, r1 - strh r0, [r2] - mov r0, sp - ldrh r1, [r0] - ldr r0, _080C60B4 @ =gUnknown_020387EC - ldr r0, [r0] - movs r3, 0xC - ldrsh r2, [r0, r3] - movs r0, 0x50 - subs r0, r2 - cmp r1, r0 - ble _080C60BC - mov r0, sp - ldrh r1, [r0] - adds r0, r2, 0 - adds r0, 0x50 - cmp r1, r0 - bge _080C60BC - ldr r1, _080C60B8 @ =REG_BLDY - movs r0, 0 - b _080C60C0 - .align 2, 0 -_080C60B0: .4byte REG_VCOUNT -_080C60B4: .4byte gUnknown_020387EC -_080C60B8: .4byte REG_BLDY -_080C60BC: - ldr r1, _080C60C8 @ =REG_BLDY - movs r0, 0x10 -_080C60C0: - strh r0, [r1] - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080C60C8: .4byte REG_BLDY - thumb_func_end sub_80C6078 - - thumb_func_start sub_80C60CC -sub_80C60CC: @ 80C60CC - push {r4,lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - ldrh r1, [r2, 0x20] - adds r0, r1 - strh r0, [r2, 0x20] - adds r0, 0x8 - lsls r0, 16 - movs r1, 0x80 - lsls r1, 17 - cmp r0, r1 - bls _080C611C - adds r0, r2, 0 - bl DestroySprite - ldr r4, _080C6124 @ =gUnknown_020387EC - ldr r1, [r4] - ldrh r0, [r1, 0xA] - adds r0, 0x1 - strh r0, [r1, 0xA] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x8 - bne _080C611C - ldrh r0, [r1] - bl FreeSpriteTilesByTag - ldr r0, [r4] - ldrh r0, [r0, 0x2] - bl FreeSpritePaletteByTag - ldr r0, [r4] - ldr r0, [r0, 0x10] - ldr r2, _080C6128 @ =0x0000ffff - movs r1, 0 - bl BlendPalettes - ldr r0, _080C612C @ =sub_80C6078 - bl SetHBlankCallback -_080C611C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C6124: .4byte gUnknown_020387EC -_080C6128: .4byte 0x0000ffff -_080C612C: .4byte sub_80C6078 - thumb_func_end sub_80C60CC - - thumb_func_start sub_80C6130 -sub_80C6130: @ 80C6130 - push {r4,r5,lr} - adds r2, r0, 0 - movs r1, 0x36 - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _080C61AA - ldr r1, _080C6184 @ =gUnknown_020387EC - ldr r0, [r1] - movs r3, 0xC - ldrsh r4, [r0, r3] - adds r5, r1, 0 - cmp r4, 0x1 - bne _080C61AA - ldrh r0, [r2, 0x2E] - ldrh r1, [r2, 0x20] - adds r0, r1 - strh r0, [r2, 0x20] - adds r0, 0xF - lsls r0, 16 - movs r1, 0x87 - lsls r1, 17 - cmp r0, r1 - bhi _080C616C - adds r3, r2, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r3] -_080C616C: - movs r3, 0x30 - ldrsh r0, [r2, r3] - cmp r0, 0 - ble _080C6188 - movs r0, 0x20 - ldrsh r1, [r2, r0] - movs r3, 0x32 - ldrsh r0, [r2, r3] - cmp r1, r0 - blt _080C6196 - b _080C6194 - .align 2, 0 -_080C6184: .4byte gUnknown_020387EC -_080C6188: - movs r0, 0x20 - ldrsh r1, [r2, r0] - movs r3, 0x32 - ldrsh r0, [r2, r3] - cmp r1, r0 - bgt _080C6196 -_080C6194: - strh r4, [r2, 0x36] -_080C6196: - movs r1, 0x36 - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _080C61AA - ldr r0, [r5] - ldrh r1, [r0, 0xA] - adds r1, 0x1 - strh r1, [r0, 0xA] - ldrh r0, [r2, 0x32] - strh r0, [r2, 0x20] -_080C61AA: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80C6130 - - thumb_func_start sub_80C61B0 -sub_80C61B0: @ 80C61B0 - push {r4-r6,lr} - ldr r2, _080C61F0 @ =INTR_CHECK - ldrh r1, [r2] - movs r5, 0x2 - orrs r1, r5 - strh r1, [r2] - ldr r3, _080C61F4 @ =REG_DISPSTAT - ldrh r1, [r3] - movs r2, 0x10 - orrs r1, r2 - strh r1, [r3] - ldr r4, _080C61F8 @ =0x04000208 - ldrh r2, [r4] - movs r6, 0 - strh r6, [r4] - ldr r3, _080C61FC @ =0x04000200 - ldrh r1, [r3] - orrs r1, r5 - strh r1, [r3] - strh r2, [r4] - ldr r2, _080C6200 @ =gMain - ldrh r1, [r2, 0x1C] - orrs r1, r5 - ldrh r3, [r2, 0x1C] - orrs r1, r6 - strh r1, [r2, 0x1C] - bl SetHBlankCallback - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C61F0: .4byte INTR_CHECK -_080C61F4: .4byte REG_DISPSTAT -_080C61F8: .4byte 0x04000208 -_080C61FC: .4byte 0x04000200 -_080C6200: .4byte gMain - thumb_func_end sub_80C61B0 - - thumb_func_start ClearGpuRegBits -ClearGpuRegBits: @ 80C6204 - push {r4,r5,lr} - ldr r3, _080C6248 @ =INTR_CHECK - ldrh r1, [r3] - ldr r2, _080C624C @ =0x0000fffd - adds r0, r2, 0 - ands r0, r1 - strh r0, [r3] - ldr r3, _080C6250 @ =REG_DISPSTAT - ldrh r1, [r3] - ldr r0, _080C6254 @ =0x0000ffef - ands r0, r1 - strh r0, [r3] - ldr r4, _080C6258 @ =0x04000208 - ldrh r3, [r4] - movs r0, 0 - strh r0, [r4] - ldr r5, _080C625C @ =0x04000200 - ldrh r1, [r5] - adds r0, r2, 0 - ands r0, r1 - strh r0, [r5] - strh r3, [r4] - ldr r0, _080C6260 @ =gMain - ldrh r1, [r0, 0x1C] - ands r2, r1 - ldrh r1, [r0, 0x1C] - strh r2, [r0, 0x1C] - movs r0, 0 - bl SetHBlankCallback - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C6248: .4byte INTR_CHECK -_080C624C: .4byte 0x0000fffd -_080C6250: .4byte REG_DISPSTAT -_080C6254: .4byte 0x0000ffef -_080C6258: .4byte 0x04000208 -_080C625C: .4byte 0x04000200 -_080C6260: .4byte gMain - thumb_func_end ClearGpuRegBits - - thumb_func_start sub_80C6264 -sub_80C6264: @ 80C6264 - push {lr} - ldr r0, _080C6278 @ =gUnknown_0203923C - ldr r1, _080C627C @ =gMapHeader - ldr r1, [r1, 0x4] - bl sub_80BBFD8 - bl sub_80BB5E4 - pop {r0} - bx r0 - .align 2, 0 -_080C6278: .4byte gUnknown_0203923C -_080C627C: .4byte gMapHeader - thumb_func_end sub_80C6264 - - thumb_func_start sub_80C6280 -sub_80C6280: @ 80C6280 - push {lr} - ldr r1, _080C6294 @ =gFieldEffectArguments - ldr r0, [r1, 0x4] - cmp r0, 0x2 - beq _080C62AA - cmp r0, 0x2 - bgt _080C6298 - cmp r0, 0x1 - beq _080C62A2 - b _080C62BE - .align 2, 0 -_080C6294: .4byte gFieldEffectArguments -_080C6298: - cmp r0, 0x3 - beq _080C62AE - cmp r0, 0x4 - beq _080C62B8 - b _080C62BE -_080C62A2: - movs r0, 0x8 - str r0, [r1, 0x14] - movs r0, 0x28 - b _080C62BC -_080C62AA: - movs r0, 0x8 - b _080C62BA -_080C62AE: - movs r0, 0x8 - negs r0, r0 - str r0, [r1, 0x14] - movs r0, 0x18 - b _080C62BC -_080C62B8: - movs r0, 0x18 -_080C62BA: - str r0, [r1, 0x14] -_080C62BC: - str r0, [r1, 0x18] -_080C62BE: - pop {r0} - bx r0 - thumb_func_end sub_80C6280 - - thumb_func_start SetUpFieldMove_SecretPower -SetUpFieldMove_SecretPower: @ 80C62C4 - push {r4,lr} - bl sub_80BB63C - ldr r0, _080C6318 @ =gScriptResult - ldrh r0, [r0] - cmp r0, 0x1 - beq _080C636E - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _080C636E - ldr r4, _080C631C @ =gUnknown_0203923C - adds r1, r4, 0x2 - adds r0, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl MetatileBehavior_IsSecretBaseCave - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C6330 - bl sub_80C6264 - ldr r1, _080C6320 @ =gFieldCallback - ldr r0, _080C6324 @ =FieldCallback_Teleport - str r0, [r1] - ldr r1, _080C6328 @ =gUnknown_03005CE4 - ldr r0, _080C632C @ =sub_80C639C - b _080C6380 - .align 2, 0 -_080C6318: .4byte gScriptResult -_080C631C: .4byte gUnknown_0203923C -_080C6320: .4byte gFieldCallback -_080C6324: .4byte FieldCallback_Teleport -_080C6328: .4byte gUnknown_03005CE4 -_080C632C: .4byte sub_80C639C -_080C6330: - adds r0, r4, 0 - bl MetatileBehavior_IsSecretBaseTree - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C6360 - bl sub_80C6264 - ldr r1, _080C6350 @ =gFieldCallback - ldr r0, _080C6354 @ =FieldCallback_Teleport - str r0, [r1] - ldr r1, _080C6358 @ =gUnknown_03005CE4 - ldr r0, _080C635C @ =sub_80C64A8 - b _080C6380 - .align 2, 0 -_080C6350: .4byte gFieldCallback -_080C6354: .4byte FieldCallback_Teleport -_080C6358: .4byte gUnknown_03005CE4 -_080C635C: .4byte sub_80C64A8 -_080C6360: - adds r0, r4, 0 - bl MetatileBehavior_IsSecretBaseShrub - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080C6372 -_080C636E: - movs r0, 0 - b _080C6384 -_080C6372: - bl sub_80C6264 - ldr r1, _080C638C @ =gFieldCallback - ldr r0, _080C6390 @ =FieldCallback_Teleport - str r0, [r1] - ldr r1, _080C6394 @ =gUnknown_03005CE4 - ldr r0, _080C6398 @ =sub_80C660C -_080C6380: - str r0, [r1] - movs r0, 0x1 -_080C6384: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C638C: .4byte gFieldCallback -_080C6390: .4byte FieldCallback_Teleport -_080C6394: .4byte gUnknown_03005CE4 -_080C6398: .4byte sub_80C660C - thumb_func_end SetUpFieldMove_SecretPower - - thumb_func_start sub_80C639C -sub_80C639C: @ 80C639C - push {lr} - ldr r1, _080C63B0 @ =gFieldEffectArguments - ldr r0, _080C63B4 @ =gLastFieldPokeMenuOpened - ldrb r0, [r0] - str r0, [r1] - ldr r0, _080C63B8 @ =gUnknown_081A2CE6 - bl ScriptContext1_SetupScript - pop {r0} - bx r0 - .align 2, 0 -_080C63B0: .4byte gFieldEffectArguments -_080C63B4: .4byte gLastFieldPokeMenuOpened -_080C63B8: .4byte gUnknown_081A2CE6 - thumb_func_end sub_80C639C - - thumb_func_start FldEff_UseSecretPowerCave -FldEff_UseSecretPowerCave: @ 80C63BC - push {lr} - bl oei_task_add - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C63E0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r2, _080C63E4 @ =sub_80C63E8 - lsrs r0, r2, 16 - strh r0, [r1, 0x18] - strh r2, [r1, 0x1A] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080C63E0: .4byte gTasks -_080C63E4: .4byte sub_80C63E8 - thumb_func_end FldEff_UseSecretPowerCave - - thumb_func_start sub_80C63E8 -sub_80C63E8: @ 80C63E8 - push {lr} - movs r0, 0xB - bl FieldEffectActiveListRemove - movs r0, 0x37 - bl FieldEffectStart - pop {r0} - bx r0 - thumb_func_end sub_80C63E8 - - thumb_func_start FldEff_SecretPowerCave -FldEff_SecretPowerCave: @ 80C63FC - push {r4,lr} - bl sub_80C6280 - ldr r0, _080C643C @ =gSpriteTemplate_83D2614 - ldr r3, _080C6440 @ =gSprites - ldr r1, _080C6444 @ =gPlayerAvatar - ldrb r1, [r1, 0x4] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - ldrh r1, [r2, 0x2] - lsls r1, 23 - lsrs r1, 23 - ldr r4, _080C6448 @ =gFieldEffectArguments - ldr r3, [r4, 0x14] - adds r1, r3 - lsls r1, 16 - asrs r1, 16 - ldrb r2, [r2] - ldr r3, [r4, 0x18] - adds r2, r3 - lsls r2, 16 - asrs r2, 16 - movs r3, 0x94 - bl CreateSprite - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C643C: .4byte gSpriteTemplate_83D2614 -_080C6440: .4byte gSprites -_080C6444: .4byte gPlayerAvatar -_080C6448: .4byte gFieldEffectArguments - thumb_func_end FldEff_SecretPowerCave - - thumb_func_start sub_80C644C -sub_80C644C: @ 80C644C - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x83 - bl PlaySE - movs r0, 0 - strh r0, [r4, 0x2E] - ldr r0, _080C6464 @ =sub_80C6468 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C6464: .4byte sub_80C6468 - thumb_func_end sub_80C644C - - thumb_func_start sub_80C6468 -sub_80C6468: @ 80C6468 - push {lr} - adds r1, r0, 0 - ldrh r2, [r1, 0x2E] - movs r3, 0x2E - ldrsh r0, [r1, r3] - cmp r0, 0x27 - bgt _080C6488 - adds r0, r2, 0x1 - strh r0, [r1, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bne _080C6490 - bl sub_80BB800 - b _080C6490 -_080C6488: - movs r0, 0 - strh r0, [r1, 0x2E] - ldr r0, _080C6494 @ =sub_80C6498 - str r0, [r1, 0x1C] -_080C6490: - pop {r0} - bx r0 - .align 2, 0 -_080C6494: .4byte sub_80C6498 - thumb_func_end sub_80C6468 - - thumb_func_start sub_80C6498 -sub_80C6498: @ 80C6498 - push {lr} - movs r1, 0x37 - bl FieldEffectStop - bl EnableBothScriptContexts - pop {r0} - bx r0 - thumb_func_end sub_80C6498 - - thumb_func_start sub_80C64A8 -sub_80C64A8: @ 80C64A8 - push {lr} - ldr r1, _080C64BC @ =gFieldEffectArguments - ldr r0, _080C64C0 @ =gLastFieldPokeMenuOpened - ldrb r0, [r0] - str r0, [r1] - ldr r0, _080C64C4 @ =gUnknown_081A2D3E - bl ScriptContext1_SetupScript - pop {r0} - bx r0 - .align 2, 0 -_080C64BC: .4byte gFieldEffectArguments -_080C64C0: .4byte gLastFieldPokeMenuOpened -_080C64C4: .4byte gUnknown_081A2D3E - thumb_func_end sub_80C64A8 - - thumb_func_start FldEff_UseSecretPowerTree -FldEff_UseSecretPowerTree: @ 80C64C8 - push {lr} - bl oei_task_add - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C64EC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r2, _080C64F0 @ =sub_80C64F4 - lsrs r0, r2, 16 - strh r0, [r1, 0x18] - strh r2, [r1, 0x1A] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080C64EC: .4byte gTasks -_080C64F0: .4byte sub_80C64F4 - thumb_func_end FldEff_UseSecretPowerTree - - thumb_func_start sub_80C64F4 -sub_80C64F4: @ 80C64F4 - push {lr} - movs r0, 0x1A - bl FieldEffectActiveListRemove - movs r0, 0x38 - bl FieldEffectStart - pop {r0} - bx r0 - thumb_func_end sub_80C64F4 - - thumb_func_start FldEff_SecretPowerTree -FldEff_SecretPowerTree: @ 80C6508 - push {r4,lr} - ldr r1, _080C6580 @ =gUnknown_0203923C - movs r2, 0 - ldrsh r0, [r1, r2] - movs r2, 0x2 - ldrsh r1, [r1, r2] - bl MapGridGetMetatileBehaviorAt - adds r2, r0, 0 - ldr r1, _080C6584 @ =0x00000fff - adds r0, r1, 0 - ands r2, r0 - cmp r2, 0x96 - bne _080C652A - ldr r1, _080C6588 @ =gFieldEffectArguments - movs r0, 0 - str r0, [r1, 0x1C] -_080C652A: - cmp r2, 0x9C - bne _080C6534 - ldr r1, _080C6588 @ =gFieldEffectArguments - movs r0, 0x2 - str r0, [r1, 0x1C] -_080C6534: - bl sub_80C6280 - ldr r0, _080C658C @ =gSpriteTemplate_83D262C - ldr r3, _080C6590 @ =gSprites - ldr r1, _080C6594 @ =gPlayerAvatar - ldrb r1, [r1, 0x4] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - ldrh r1, [r2, 0x2] - lsls r1, 23 - lsrs r1, 23 - ldr r4, _080C6588 @ =gFieldEffectArguments - ldr r3, [r4, 0x14] - adds r1, r3 - lsls r1, 16 - asrs r1, 16 - ldrb r2, [r2] - ldr r3, [r4, 0x18] - adds r2, r3 - lsls r2, 16 - asrs r2, 16 - movs r3, 0x94 - bl CreateSprite - ldr r0, [r4, 0x1C] - cmp r0, 0x1 - beq _080C6572 - cmp r0, 0x3 - bne _080C6576 -_080C6572: - bl sub_80BB800 -_080C6576: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C6580: .4byte gUnknown_0203923C -_080C6584: .4byte 0x00000fff -_080C6588: .4byte gFieldEffectArguments -_080C658C: .4byte gSpriteTemplate_83D262C -_080C6590: .4byte gSprites -_080C6594: .4byte gPlayerAvatar - thumb_func_end FldEff_SecretPowerTree - - thumb_func_start sub_80C6598 -sub_80C6598: @ 80C6598 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x9B - bl PlaySE - ldr r0, _080C65BC @ =gFieldEffectArguments - ldr r1, [r0, 0x1C] - adds r2, r4, 0 - adds r2, 0x2A - movs r0, 0 - strb r1, [r2] - strh r0, [r4, 0x2E] - ldr r0, _080C65C0 @ =sub_80C65C4 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C65BC: .4byte gFieldEffectArguments -_080C65C0: .4byte sub_80C65C4 - thumb_func_end sub_80C6598 - - thumb_func_start sub_80C65C4 -sub_80C65C4: @ 80C65C4 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x27 - ble _080C65EE - ldr r0, _080C65F4 @ =gFieldEffectArguments - ldr r0, [r0, 0x1C] - cmp r0, 0 - beq _080C65E2 - cmp r0, 0x2 - bne _080C65E6 -_080C65E2: - bl sub_80BB800 -_080C65E6: - movs r0, 0 - strh r0, [r4, 0x2E] - ldr r0, _080C65F8 @ =sub_80C65FC - str r0, [r4, 0x1C] -_080C65EE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C65F4: .4byte gFieldEffectArguments -_080C65F8: .4byte sub_80C65FC - thumb_func_end sub_80C65C4 - - thumb_func_start sub_80C65FC -sub_80C65FC: @ 80C65FC - push {lr} - movs r1, 0x38 - bl FieldEffectStop - bl EnableBothScriptContexts - pop {r0} - bx r0 - thumb_func_end sub_80C65FC - - thumb_func_start sub_80C660C -sub_80C660C: @ 80C660C - push {lr} - ldr r1, _080C6620 @ =gFieldEffectArguments - ldr r0, _080C6624 @ =gLastFieldPokeMenuOpened - ldrb r0, [r0] - str r0, [r1] - ldr r0, _080C6628 @ =gUnknown_081A2D96 - bl ScriptContext1_SetupScript - pop {r0} - bx r0 - .align 2, 0 -_080C6620: .4byte gFieldEffectArguments -_080C6624: .4byte gLastFieldPokeMenuOpened -_080C6628: .4byte gUnknown_081A2D96 - thumb_func_end sub_80C660C - - thumb_func_start FldEff_UseSecretPowerShrub -FldEff_UseSecretPowerShrub: @ 80C662C - push {lr} - bl oei_task_add - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C6650 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r2, _080C6654 @ =sub_80C6658 - lsrs r0, r2, 16 - strh r0, [r1, 0x18] - strh r2, [r1, 0x1A] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080C6650: .4byte gTasks -_080C6654: .4byte sub_80C6658 - thumb_func_end FldEff_UseSecretPowerShrub - - thumb_func_start sub_80C6658 -sub_80C6658: @ 80C6658 - push {lr} - movs r0, 0x1B - bl FieldEffectActiveListRemove - movs r0, 0x39 - bl FieldEffectStart - pop {r0} - bx r0 - thumb_func_end sub_80C6658 - - thumb_func_start FldEff_SecretPowerShrub -FldEff_SecretPowerShrub: @ 80C666C - push {r4,lr} - bl sub_80C6280 - ldr r0, _080C66AC @ =gSpriteTemplate_83D2644 - ldr r3, _080C66B0 @ =gSprites - ldr r1, _080C66B4 @ =gPlayerAvatar - ldrb r1, [r1, 0x4] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - ldrh r1, [r2, 0x2] - lsls r1, 23 - lsrs r1, 23 - ldr r4, _080C66B8 @ =gFieldEffectArguments - ldr r3, [r4, 0x14] - adds r1, r3 - lsls r1, 16 - asrs r1, 16 - ldrb r2, [r2] - ldr r3, [r4, 0x18] - adds r2, r3 - lsls r2, 16 - asrs r2, 16 - movs r3, 0x94 - bl CreateSprite - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C66AC: .4byte gSpriteTemplate_83D2644 -_080C66B0: .4byte gSprites -_080C66B4: .4byte gPlayerAvatar -_080C66B8: .4byte gFieldEffectArguments - thumb_func_end FldEff_SecretPowerShrub - - thumb_func_start sub_80C66BC -sub_80C66BC: @ 80C66BC - push {r4,lr} - adds r4, r0, 0 - movs r0, 0xA9 - bl PlaySE - movs r0, 0 - strh r0, [r4, 0x2E] - ldr r0, _080C66D4 @ =sub_80C66D8 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C66D4: .4byte sub_80C66D8 - thumb_func_end sub_80C66BC - - thumb_func_start sub_80C66D8 -sub_80C66D8: @ 80C66D8 - push {lr} - adds r1, r0, 0 - ldrh r2, [r1, 0x2E] - movs r3, 0x2E - ldrsh r0, [r1, r3] - cmp r0, 0x27 - bgt _080C66F8 - adds r0, r2, 0x1 - strh r0, [r1, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bne _080C6700 - bl sub_80BB800 - b _080C6700 -_080C66F8: - movs r0, 0 - strh r0, [r1, 0x2E] - ldr r0, _080C6704 @ =sub_80C6708 - str r0, [r1, 0x1C] -_080C6700: - pop {r0} - bx r0 - .align 2, 0 -_080C6704: .4byte sub_80C6708 - thumb_func_end sub_80C66D8 - - thumb_func_start sub_80C6708 -sub_80C6708: @ 80C6708 - push {lr} - movs r1, 0x39 - bl FieldEffectStop - bl EnableBothScriptContexts - pop {r0} - bx r0 - thumb_func_end sub_80C6708 - - thumb_func_start FldEff_PCTurnOn -FldEff_PCTurnOn: @ 80C6718 - push {r4,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - ldr r0, _080C6758 @ =sub_80C6760 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C675C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - mov r0, sp - ldrh r0, [r0] - movs r2, 0 - strh r0, [r1, 0x8] - ldrh r0, [r4] - strh r0, [r1, 0xA] - strh r2, [r1, 0xC] - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C6758: .4byte sub_80C6760 -_080C675C: .4byte gTasks - thumb_func_end FldEff_PCTurnOn - - thumb_func_start sub_80C6760 -sub_80C6760: @ 80C6760 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080C6788 @ =gTasks + 0x8 - adds r4, r0, r1 - ldrh r0, [r4, 0x4] - subs r0, 0x4 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - bhi _080C682E - lsls r0, 2 - ldr r1, _080C678C @ =_080C6790 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C6788: .4byte gTasks + 0x8 -_080C678C: .4byte _080C6790 - .align 2, 0 -_080C6790: - .4byte _080C67D4 - .4byte _080C682E - .4byte _080C682E - .4byte _080C682E - .4byte _080C67E2 - .4byte _080C682E - .4byte _080C682E - .4byte _080C682E - .4byte _080C67D4 - .4byte _080C682E - .4byte _080C682E - .4byte _080C682E - .4byte _080C67E2 - .4byte _080C682E - .4byte _080C682E - .4byte _080C682E - .4byte _080C6800 -_080C67D4: - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - movs r2, 0x89 - lsls r2, 2 - b _080C67EE -_080C67E2: - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - movs r2, 0x88 - lsls r2, 2 -_080C67EE: - bl MapGridSetMetatileIdAt - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl CurrentMapDrawMetatileAt - b _080C682E -_080C6800: - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - movs r2, 0x89 - lsls r2, 2 - bl MapGridSetMetatileIdAt - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl CurrentMapDrawMetatileAt - movs r0, 0x3D - bl FieldEffectActiveListRemove - bl EnableBothScriptContexts - adds r0, r5, 0 - bl DestroyTask - b _080C6834 -_080C682E: - ldrh r0, [r4, 0x4] - adds r0, 0x1 - strh r0, [r4, 0x4] -_080C6834: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80C6760 - - thumb_func_start sub_80C683C -sub_80C683C: @ 80C683C - push {r4,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - movs r0, 0x3 - bl PlaySE - ldr r0, _080C6874 @ =0x00004054 - bl VarGet - lsls r0, 16 - cmp r0, 0 - bne _080C6878 - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r2, 0xE2 - lsls r2, 4 - bl MapGridSetMetatileIdAt - b _080C6888 - .align 2, 0 -_080C6874: .4byte 0x00004054 -_080C6878: - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - ldr r2, _080C68A0 @ =0x00000e21 - bl MapGridSetMetatileIdAt -_080C6888: - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl CurrentMapDrawMetatileAt - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C68A0: .4byte 0x00000e21 - thumb_func_end sub_80C683C - - thumb_func_start sub_80C68A4 -sub_80C68A4: @ 80C68A4 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - ldr r0, _080C68E4 @ =sub_80C68EC - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C68E8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r4, [r1, 0x8] - strh r5, [r1, 0xA] - strh r6, [r1, 0xC] - strh r0, [r1, 0xE] - movs r0, 0x1 - strh r0, [r1, 0x10] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C68E4: .4byte sub_80C68EC -_080C68E8: .4byte gTasks - thumb_func_end sub_80C68A4 - - thumb_func_start sub_80C68EC -sub_80C68EC: @ 80C68EC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080C690C @ =gTasks + 0x8 - adds r4, r0, r1 - ldrh r1, [r4, 0x6] - movs r2, 0x6 - ldrsh r0, [r4, r2] - cmp r0, 0x6 - bne _080C6910 - movs r0, 0 - b _080C6912 - .align 2, 0 -_080C690C: .4byte gTasks + 0x8 -_080C6910: - adds r0, r1, 0x1 -_080C6912: - strh r0, [r4, 0x6] - movs r3, 0x6 - ldrsh r0, [r4, r3] - cmp r0, 0 - bne _080C6964 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x2 - bne _080C692C - movs r2, 0 - ldrsh r0, [r4, r2] - bl DoBalloonSoundEffect -_080C692C: - movs r3, 0x2 - ldrsh r0, [r4, r3] - movs r2, 0x4 - ldrsh r1, [r4, r2] - ldrh r2, [r4, 0x8] - ldrh r3, [r4] - adds r2, r3 - lsls r2, 16 - lsrs r2, 16 - bl MapGridSetMetatileIdAt - movs r1, 0x2 - ldrsh r0, [r4, r1] - movs r2, 0x4 - ldrsh r1, [r4, r2] - bl CurrentMapDrawMetatileAt - ldrh r1, [r4, 0x8] - movs r3, 0x8 - ldrsh r0, [r4, r3] - cmp r0, 0x3 - bne _080C6960 - adds r0, r5, 0 - bl DestroyTask - b _080C6964 -_080C6960: - adds r0, r1, 0x1 - strh r0, [r4, 0x8] -_080C6964: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80C68EC - - thumb_func_start DoBalloonSoundEffect -DoBalloonSoundEffect: @ 80C696C - push {lr} - lsls r0, 16 - asrs r1, r0, 16 - movs r0, 0xCE - lsls r0, 2 - cmp r1, r0 - beq _080C6998 - cmp r1, r0 - bgt _080C6988 - movs r0, 0x8A - lsls r0, 2 - cmp r1, r0 - beq _080C69B0 - b _080C69B6 -_080C6988: - movs r0, 0xCF - lsls r0, 2 - cmp r1, r0 - beq _080C69A0 - adds r0, 0x4 - cmp r1, r0 - beq _080C69A8 - b _080C69B6 -_080C6998: - movs r0, 0x4A - bl PlaySE - b _080C69B6 -_080C69A0: - movs r0, 0x4B - bl PlaySE - b _080C69B6 -_080C69A8: - movs r0, 0x4C - bl PlaySE - b _080C69B6 -_080C69B0: - movs r0, 0x4E - bl PlaySE -_080C69B6: - pop {r0} - bx r0 - thumb_func_end DoBalloonSoundEffect - - thumb_func_start FldEff_Nop47 -FldEff_Nop47: @ 80C69BC - movs r0, 0 - bx lr - thumb_func_end FldEff_Nop47 - - thumb_func_start FldEff_Nop48 -FldEff_Nop48: @ 80C69C0 - movs r0, 0 - bx lr - thumb_func_end FldEff_Nop48 - - thumb_func_start sub_80C69C4 -sub_80C69C4: @ 80C69C4 - push {r4-r6,lr} - adds r5, r0, 0 - adds r4, r1, 0 - lsls r5, 16 - lsrs r5, 16 - lsls r4, 16 - lsrs r4, 16 - movs r0, 0x4D - bl PlaySE - lsls r5, 16 - asrs r5, 16 - lsls r4, 16 - asrs r4, 16 - ldr r2, _080C6A0C @ =0x00000276 - adds r0, r5, 0 - adds r1, r4, 0 - bl MapGridSetMetatileIdAt - subs r6, r4, 0x1 - ldr r2, _080C6A10 @ =0x0000026e - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridSetMetatileIdAt - adds r0, r5, 0 - adds r1, r4, 0 - bl CurrentMapDrawMetatileAt - adds r0, r5, 0 - adds r1, r6, 0 - bl CurrentMapDrawMetatileAt - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C6A0C: .4byte 0x00000276 -_080C6A10: .4byte 0x0000026e - thumb_func_end sub_80C69C4 - - thumb_func_start sub_80C6A14 -sub_80C6A14: @ 80C6A14 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _080C6A44 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r1 - ldrh r2, [r1, 0x8] - movs r3, 0x8 - ldrsh r0, [r1, r3] - cmp r0, 0x7 - bne _080C6A48 - movs r2, 0xA - ldrsh r0, [r1, r2] - movs r3, 0xC - ldrsh r1, [r1, r3] - bl sub_80C69C4 - adds r0, r4, 0 - bl DestroyTask - b _080C6A4C - .align 2, 0 -_080C6A44: .4byte gTasks -_080C6A48: - adds r0, r2, 0x1 - strh r0, [r1, 0x8] -_080C6A4C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80C6A14 - - thumb_func_start sub_80C6A54 -sub_80C6A54: @ 80C6A54 - push {r4-r7,lr} - lsls r0, 16 - lsrs r5, r0, 16 - adds r7, r5, 0 - lsls r1, 16 - lsrs r4, r1, 16 - adds r6, r4, 0 - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C6A7C - lsls r0, r5, 16 - asrs r0, 16 - lsls r1, r4, 16 - asrs r1, 16 - bl sub_80C69C4 - b _080C6A9E -_080C6A7C: - cmp r0, 0x2 - bne _080C6A9E - ldr r0, _080C6AA4 @ =sub_80C6A14 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C6AA8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r0, [r1, 0x8] - strh r7, [r1, 0xA] - strh r6, [r1, 0xC] -_080C6A9E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C6AA4: .4byte sub_80C6A14 -_080C6AA8: .4byte gTasks - thumb_func_end sub_80C6A54 - - thumb_func_start Task_DecorationSoundEffect -Task_DecorationSoundEffect: @ 80C6AAC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _080C6AE4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r1 - ldrh r2, [r1, 0xA] - movs r3, 0xA - ldrsh r0, [r1, r3] - cmp r0, 0x7 - beq _080C6AC8 - b _080C6C26 -_080C6AC8: - ldr r2, _080C6AE8 @ =0xfffffd88 - adds r0, r2, 0 - ldrh r1, [r1, 0x8] - adds r0, r1 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3B - bls _080C6ADA - b _080C6C1E -_080C6ADA: - lsls r0, 2 - ldr r1, _080C6AEC @ =_080C6AF0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C6AE4: .4byte gTasks -_080C6AE8: .4byte 0xfffffd88 -_080C6AEC: .4byte _080C6AF0 - .align 2, 0 -_080C6AF0: - .4byte _080C6BE0 - .4byte _080C6BE8 - .4byte _080C6BF0 - .4byte _080C6BF8 - .4byte _080C6C00 - .4byte _080C6C08 - .4byte _080C6C10 - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C1E - .4byte _080C6C18 -_080C6BE0: - movs r0, 0x3E - bl PlaySE - b _080C6C1E -_080C6BE8: - movs r0, 0x3F - bl PlaySE - b _080C6C1E -_080C6BF0: - movs r0, 0x40 - bl PlaySE - b _080C6C1E -_080C6BF8: - movs r0, 0x41 - bl PlaySE - b _080C6C1E -_080C6C00: - movs r0, 0x42 - bl PlaySE - b _080C6C1E -_080C6C08: - movs r0, 0x43 - bl PlaySE - b _080C6C1E -_080C6C10: - movs r0, 0x44 - bl PlaySE - b _080C6C1E -_080C6C18: - movs r0, 0x45 - bl PlaySE -_080C6C1E: - adds r0, r4, 0 - bl DestroyTask - b _080C6C2A -_080C6C26: - adds r0, r2, 0x1 - strh r0, [r1, 0xA] -_080C6C2A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end Task_DecorationSoundEffect - - thumb_func_start DoDecorationSoundEffect -DoDecorationSoundEffect: @ 80C6C30 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _080C6C5C @ =Task_DecorationSoundEffect - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C6C60 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r4, [r1, 0x8] - strh r0, [r1, 0xA] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C6C5C: .4byte Task_DecorationSoundEffect -_080C6C60: .4byte gTasks - thumb_func_end DoDecorationSoundEffect - - thumb_func_start SpriteCB_YellowCave4Sparkle -SpriteCB_YellowCave4Sparkle: @ 80C6C64 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - bne _080C6C7C - movs r0, 0xC3 - bl PlaySE -_080C6C7C: - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x1F - ble _080C6C8A - adds r0, r4, 0 - bl DestroySprite -_080C6C8A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end SpriteCB_YellowCave4Sparkle - - thumb_func_start DoYellowCave4Sparkle -DoYellowCave4Sparkle: @ 80C6C90 - push {r4,lr} - sub sp, 0x4 - ldr r3, _080C6D28 @ =gMapObjects - ldr r2, _080C6D2C @ =gPlayerAvatar - ldrb r1, [r2, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r0, 0x10] - mov r0, sp - strh r1, [r0] - ldrb r1, [r2, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r0, [r0, 0x12] - mov r4, sp - adds r4, 0x2 - strh r0, [r4] - mov r0, sp - adds r1, r4, 0 - movs r2, 0x8 - movs r3, 0x4 - bl sub_8060470 - ldr r0, _080C6D30 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x58] - mov r1, sp - movs r2, 0 - ldrsh r1, [r1, r2] - movs r3, 0 - ldrsh r2, [r4, r3] - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _080C6D1E - ldr r3, _080C6D34 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r4, r2, r3 - movs r0, 0x3E - adds r0, r4 - mov r12, r0 - ldrb r0, [r0] - movs r1, 0x2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - ldrb r1, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - movs r1, 0xF - ands r0, r1 - movs r1, 0x50 - orrs r0, r1 - strb r0, [r4, 0x5] - adds r3, 0x1C - adds r2, r3 - ldr r0, _080C6D38 @ =SpriteCB_YellowCave4Sparkle - str r0, [r2] - movs r0, 0 - strh r0, [r4, 0x2E] -_080C6D1E: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C6D28: .4byte gMapObjects -_080C6D2C: .4byte gPlayerAvatar -_080C6D30: .4byte gFieldEffectObjectTemplatePointers -_080C6D34: .4byte gSprites -_080C6D38: .4byte SpriteCB_YellowCave4Sparkle - thumb_func_end DoYellowCave4Sparkle - - thumb_func_start FldEff_SandPillar -FldEff_SandPillar: @ 80C6D3C - push {r4,lr} - sub sp, 0x4 - bl ScriptContext2_Enable - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - ldr r1, _080C6D78 @ =gFieldEffectArguments - mov r0, sp - movs r2, 0 - ldrsh r0, [r0, r2] - str r0, [r1, 0x14] - movs r3, 0 - ldrsh r0, [r4, r3] - str r0, [r1, 0x18] - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _080C6DBC - cmp r0, 0x2 - bgt _080C6D7C - cmp r0, 0x1 - beq _080C6D86 - b _080C6E4C - .align 2, 0 -_080C6D78: .4byte gFieldEffectArguments -_080C6D7C: - cmp r0, 0x3 - beq _080C6DEC - cmp r0, 0x4 - beq _080C6E24 - b _080C6E4C -_080C6D86: - ldr r0, _080C6DB0 @ =gSpriteTemplate_83D26A0 - ldr r3, _080C6DB4 @ =gSprites - ldr r1, _080C6DB8 @ =gPlayerAvatar - ldrb r1, [r1, 0x4] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - ldrh r1, [r2, 0x2] - lsls r1, 23 - lsrs r1, 7 - movs r3, 0x80 - lsls r3, 12 - adds r1, r3 - asrs r1, 16 - ldrb r2, [r2] - adds r2, 0x20 - movs r3, 0 - bl CreateSprite - b _080C6E4C - .align 2, 0 -_080C6DB0: .4byte gSpriteTemplate_83D26A0 -_080C6DB4: .4byte gSprites -_080C6DB8: .4byte gPlayerAvatar -_080C6DBC: - ldr r0, _080C6DE0 @ =gSpriteTemplate_83D26A0 - ldr r3, _080C6DE4 @ =gSprites - ldr r1, _080C6DE8 @ =gPlayerAvatar - ldrb r1, [r1, 0x4] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - ldrh r1, [r2, 0x2] - lsls r1, 23 - lsrs r1, 7 - movs r3, 0x80 - lsls r3, 12 - adds r1, r3 - asrs r1, 16 - ldrb r2, [r2] - b _080C6E0C - .align 2, 0 -_080C6DE0: .4byte gSpriteTemplate_83D26A0 -_080C6DE4: .4byte gSprites -_080C6DE8: .4byte gPlayerAvatar -_080C6DEC: - ldr r0, _080C6E14 @ =gSpriteTemplate_83D26A0 - ldr r3, _080C6E18 @ =gSprites - ldr r1, _080C6E1C @ =gPlayerAvatar - ldrb r1, [r1, 0x4] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - ldrh r1, [r2, 0x2] - lsls r1, 23 - lsrs r1, 7 - ldr r3, _080C6E20 @ =0xfff80000 - adds r1, r3 - asrs r1, 16 - ldrb r2, [r2] - adds r2, 0x10 -_080C6E0C: - movs r3, 0x94 - bl CreateSprite - b _080C6E4C - .align 2, 0 -_080C6E14: .4byte gSpriteTemplate_83D26A0 -_080C6E18: .4byte gSprites -_080C6E1C: .4byte gPlayerAvatar -_080C6E20: .4byte 0xfff80000 -_080C6E24: - ldr r0, _080C6E58 @ =gSpriteTemplate_83D26A0 - ldr r3, _080C6E5C @ =gSprites - ldr r1, _080C6E60 @ =gPlayerAvatar - ldrb r1, [r1, 0x4] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r3 - ldrh r1, [r2, 0x2] - lsls r1, 23 - lsrs r1, 7 - movs r3, 0xC0 - lsls r3, 13 - adds r1, r3 - asrs r1, 16 - ldrb r2, [r2] - adds r2, 0x10 - movs r3, 0x94 - bl CreateSprite -_080C6E4C: - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080C6E58: .4byte gSpriteTemplate_83D26A0 -_080C6E5C: .4byte gSprites -_080C6E60: .4byte gPlayerAvatar - thumb_func_end FldEff_SandPillar - - thumb_func_start SpriteCB_SandPillar_0 -SpriteCB_SandPillar_0: @ 80C6E64 - push {r4,r5,lr} - adds r5, r0, 0 - movs r0, 0x83 - bl PlaySE - ldr r4, _080C6E90 @ =gFieldEffectArguments - ldr r0, [r4, 0x14] - ldr r1, [r4, 0x18] - subs r1, 0x1 - bl MapGridGetMetatileIdAt - ldr r1, _080C6E94 @ =0x00000286 - cmp r0, r1 - bne _080C6E9C - ldr r0, [r4, 0x14] - ldr r1, [r4, 0x18] - subs r1, 0x1 - ldr r2, _080C6E98 @ =0x00000e02 - bl MapGridSetMetatileIdAt - b _080C6EAA - .align 2, 0 -_080C6E90: .4byte gFieldEffectArguments -_080C6E94: .4byte 0x00000286 -_080C6E98: .4byte 0x00000e02 -_080C6E9C: - ldr r0, [r4, 0x14] - ldr r1, [r4, 0x18] - subs r1, 0x1 - movs r2, 0xA1 - lsls r2, 2 - bl MapGridSetMetatileIdAt -_080C6EAA: - ldr r4, _080C6ED8 @ =gFieldEffectArguments - ldr r0, [r4, 0x14] - ldr r1, [r4, 0x18] - ldr r2, _080C6EDC @ =0x0000020a - bl MapGridSetMetatileIdAt - ldr r0, [r4, 0x14] - ldr r1, [r4, 0x18] - subs r1, 0x1 - bl CurrentMapDrawMetatileAt - ldr r0, [r4, 0x14] - ldr r1, [r4, 0x18] - bl CurrentMapDrawMetatileAt - movs r0, 0 - strh r0, [r5, 0x2E] - ldr r0, _080C6EE0 @ =SpriteCB_SandPillar_1 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C6ED8: .4byte gFieldEffectArguments -_080C6EDC: .4byte 0x0000020a -_080C6EE0: .4byte SpriteCB_SandPillar_1 - thumb_func_end SpriteCB_SandPillar_0 - - thumb_func_start SpriteCB_SandPillar_1 -SpriteCB_SandPillar_1: @ 80C6EE4 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r1, [r5, 0x2E] - movs r2, 0x2E - ldrsh r0, [r5, r2] - cmp r0, 0x11 - bgt _080C6EF8 - adds r0, r1, 0x1 - strh r0, [r5, 0x2E] - b _080C6F14 -_080C6EF8: - ldr r4, _080C6F1C @ =gFieldEffectArguments - ldr r0, [r4, 0x14] - ldr r1, [r4, 0x18] - ldr r2, _080C6F20 @ =0x00000e8c - bl MapGridSetMetatileIdAt - ldr r0, [r4, 0x14] - ldr r1, [r4, 0x18] - bl CurrentMapDrawMetatileAt - movs r0, 0 - strh r0, [r5, 0x2E] - ldr r0, _080C6F24 @ =SpriteCB_SandPillar_2 - str r0, [r5, 0x1C] -_080C6F14: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C6F1C: .4byte gFieldEffectArguments -_080C6F20: .4byte 0x00000e8c -_080C6F24: .4byte SpriteCB_SandPillar_2 - thumb_func_end SpriteCB_SandPillar_1 - - thumb_func_start SpriteCB_SandPillar_2 -SpriteCB_SandPillar_2: @ 80C6F28 - push {lr} - movs r1, 0x34 - bl FieldEffectStop - bl EnableBothScriptContexts - pop {r0} - bx r0 - thumb_func_end SpriteCB_SandPillar_2 - - thumb_func_start GetShieldToyTVDecorationInfo -GetShieldToyTVDecorationInfo: @ 80C6F38 - push {r4,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileIdAt - adds r1, r0, 0 - ldr r0, _080C6F70 @ =0x000002f5 - cmp r1, r0 - beq _080C6FE8 - cmp r1, r0 - bgt _080C6F74 - subs r0, 0x17 - cmp r1, r0 - beq _080C6FB0 - adds r0, 0x16 - cmp r1, r0 - beq _080C6FDC - b _080C6FFA - .align 2, 0 -_080C6F70: .4byte 0x000002f5 -_080C6F74: - ldr r0, _080C6F9C @ =0x000002f6 - cmp r1, r0 - beq _080C6FF4 - adds r0, 0x40 - cmp r1, r0 - bne _080C6FFA - ldr r0, _080C6FA0 @ =gStringVar1 - movs r1, 0x64 - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r0, _080C6FA4 @ =gStringVar2 - ldr r1, _080C6FA8 @ =gSecretBaseText_GoldRank - bl StringCopy - ldr r1, _080C6FAC @ =gScriptResult - movs r0, 0 - b _080C6FF8 - .align 2, 0 -_080C6F9C: .4byte 0x000002f6 -_080C6FA0: .4byte gStringVar1 -_080C6FA4: .4byte gStringVar2 -_080C6FA8: .4byte gSecretBaseText_GoldRank -_080C6FAC: .4byte gScriptResult -_080C6FB0: - ldr r0, _080C6FCC @ =gStringVar1 - movs r1, 0x32 - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _080C6FD0 @ =gStringVar2 - ldr r1, _080C6FD4 @ =gSecretBaseText_SilverRank - bl StringCopy - ldr r1, _080C6FD8 @ =gScriptResult - movs r0, 0 - b _080C6FF8 - .align 2, 0 -_080C6FCC: .4byte gStringVar1 -_080C6FD0: .4byte gStringVar2 -_080C6FD4: .4byte gSecretBaseText_SilverRank -_080C6FD8: .4byte gScriptResult -_080C6FDC: - ldr r1, _080C6FE4 @ =gScriptResult - movs r0, 0x1 - b _080C6FF8 - .align 2, 0 -_080C6FE4: .4byte gScriptResult -_080C6FE8: - ldr r1, _080C6FF0 @ =gScriptResult - movs r0, 0x2 - b _080C6FF8 - .align 2, 0 -_080C6FF0: .4byte gScriptResult -_080C6FF4: - ldr r1, _080C7004 @ =gScriptResult - movs r0, 0x3 -_080C6FF8: - strh r0, [r1] -_080C6FFA: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C7004: .4byte gScriptResult - thumb_func_end GetShieldToyTVDecorationInfo - - thumb_func_start Task_FieldPoisonEffect -Task_FieldPoisonEffect: @ 80C7008 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080C702C @ =gTasks + 0x8 - adds r1, r0, r1 - movs r3, 0 - ldrsh r0, [r1, r3] - cmp r0, 0x1 - beq _080C7046 - cmp r0, 0x1 - bgt _080C7030 - cmp r0, 0 - beq _080C7036 - b _080C7062 - .align 2, 0 -_080C702C: .4byte gTasks + 0x8 -_080C7030: - cmp r0, 0x2 - beq _080C705A - b _080C7062 -_080C7036: - ldrh r0, [r1, 0x2] - adds r0, 0x2 - strh r0, [r1, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - ble _080C7062 - b _080C7052 -_080C7046: - ldrh r0, [r1, 0x2] - subs r0, 0x2 - strh r0, [r1, 0x2] - lsls r0, 16 - cmp r0, 0 - bne _080C7062 -_080C7052: - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _080C7062 -_080C705A: - adds r0, r2, 0 - bl DestroyTask - b _080C706C -_080C7062: - ldr r2, _080C7070 @ =REG_MOSAIC - ldrh r1, [r1, 0x2] - lsls r0, r1, 4 - orrs r0, r1 - strh r0, [r2] -_080C706C: - pop {r0} - bx r0 - .align 2, 0 -_080C7070: .4byte REG_MOSAIC - thumb_func_end Task_FieldPoisonEffect - - thumb_func_start DoFieldPoisonEffect -DoFieldPoisonEffect: @ 80C7074 - push {lr} - movs r0, 0x4F - bl PlaySE - ldr r0, _080C7088 @ =Task_FieldPoisonEffect - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080C7088: .4byte Task_FieldPoisonEffect - thumb_func_end DoFieldPoisonEffect - - thumb_func_start FieldPoisonEffectIsRunning -FieldPoisonEffectIsRunning: @ 80C708C - push {lr} - ldr r0, _080C709C @ =Task_FieldPoisonEffect - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080C709C: .4byte Task_FieldPoisonEffect - thumb_func_end FieldPoisonEffectIsRunning - - thumb_func_start Task_WateringBerryTreeAnim_0 -Task_WateringBerryTreeAnim_0: @ 80C70A0 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C70B4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080C70B8 @ =Task_WateringBerryTreeAnim_1 - str r0, [r1] - bx lr - .align 2, 0 -_080C70B4: .4byte gTasks -_080C70B8: .4byte Task_WateringBerryTreeAnim_1 - thumb_func_end Task_WateringBerryTreeAnim_0 - - thumb_func_start Task_WateringBerryTreeAnim_1 -Task_WateringBerryTreeAnim_1: @ 80C70BC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080C7120 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080C7124 @ =gMapObjects - adds r4, r0, r1 - adds r0, r4, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _080C70E8 - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _080C711A -_080C70E8: - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - bl sub_8059D08 - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - bl GetStepInPlaceDelay16AnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldObjectSetSpecialAnim - ldr r1, _080C7128 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080C712C @ =Task_WateringBerryTreeAnim_2 - str r1, [r0] -_080C711A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C7120: .4byte gPlayerAvatar -_080C7124: .4byte gMapObjects -_080C7128: .4byte gTasks -_080C712C: .4byte Task_WateringBerryTreeAnim_2 - thumb_func_end Task_WateringBerryTreeAnim_1 - - thumb_func_start Task_WateringBerryTreeAnim_2 -Task_WateringBerryTreeAnim_2: @ 80C7130 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080C7184 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080C7188 @ =gMapObjects - adds r5, r0, r1 - adds r0, r5, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _080C7194 - ldr r1, _080C718C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r1 - ldrh r0, [r2, 0xA] - adds r1, r0, 0x1 - strh r1, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - bgt _080C7190 - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - bl GetStepInPlaceDelay16AnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FieldObjectSetSpecialAnim - b _080C7194 - .align 2, 0 -_080C7184: .4byte gPlayerAvatar -_080C7188: .4byte gMapObjects -_080C718C: .4byte gTasks -_080C7190: - ldr r0, _080C719C @ =Task_WateringBerryTreeAnim_3 - str r0, [r2] -_080C7194: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C719C: .4byte Task_WateringBerryTreeAnim_3 - thumb_func_end Task_WateringBerryTreeAnim_2 - - thumb_func_start Task_WateringBerryTreeAnim_3 -Task_WateringBerryTreeAnim_3: @ 80C71A0 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_80597D0 - lsls r0, 24 - lsrs r0, 24 - bl SetPlayerAvatarTransitionFlags - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts - pop {r4} - pop {r0} - bx r0 - thumb_func_end Task_WateringBerryTreeAnim_3 - - thumb_func_start DoWateringBerryTreeAnim -DoWateringBerryTreeAnim: @ 80C71C4 - push {lr} - ldr r0, _080C71D4 @ =Task_WateringBerryTreeAnim_0 - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080C71D4: .4byte Task_WateringBerryTreeAnim_0 - thumb_func_end DoWateringBerryTreeAnim - - thumb_func_start CreateRecordMixingSprite -CreateRecordMixingSprite: @ 80C71D8 - push {r4,r5,lr} - ldr r0, _080C722C @ =gUnknown_083D2878 - bl LoadSpritePalette - ldr r0, _080C7230 @ =gSpriteTemplate_83D2894 - movs r1, 0 - movs r2, 0 - movs r3, 0x52 - bl CreateSprite - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x40 - beq _080C7238 - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - ldr r1, _080C7234 @ =gSprites - adds r4, r0, r1 - adds r2, r4, 0 - adds r2, 0x20 - adds r3, r4, 0 - adds r3, 0x22 - movs r0, 0x10 - movs r1, 0xD - bl sub_8060388 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r2] - ldrh r0, [r4, 0x20] - adds r0, 0x10 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x22] - adds r0, 0x2 - strh r0, [r4, 0x22] - adds r0, r5, 0 - b _080C723A - .align 2, 0 -_080C722C: .4byte gUnknown_083D2878 -_080C7230: .4byte gSpriteTemplate_83D2894 -_080C7234: .4byte gSprites -_080C7238: - movs r0, 0x40 -_080C723A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end CreateRecordMixingSprite - - thumb_func_start DestroyRecordMixingSprite -DestroyRecordMixingSprite: @ 80C7240 - push {r4-r7,lr} - ldr r4, _080C7274 @ =gSprites - adds r7, r4, 0 - movs r6, 0 - movs r5, 0x3F -_080C724A: - adds r0, r7, 0 - adds r0, 0x14 - adds r0, r6, r0 - ldr r1, [r0] - ldr r0, _080C7278 @ =gSpriteTemplate_83D2894 - cmp r1, r0 - bne _080C7264 - adds r0, r4, 0 - bl FreeSpritePalette - adds r0, r4, 0 - bl DestroySprite -_080C7264: - adds r4, 0x44 - adds r6, 0x44 - subs r5, 0x1 - cmp r5, 0 - bge _080C724A - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C7274: .4byte gSprites -_080C7278: .4byte gSpriteTemplate_83D2894 - thumb_func_end DestroyRecordMixingSprite - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/fldeff_berrytree.s b/asm/fldeff_berrytree.s new file mode 100755 index 000000000..a36ba0519 --- /dev/null +++ b/asm/fldeff_berrytree.s @@ -0,0 +1,164 @@ + .include "constants/gba_constants.inc" + .include "constants/species_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start Task_WateringBerryTreeAnim_0 +Task_WateringBerryTreeAnim_0: @ 80C70A0 + lsls r0, 24 + lsrs r0, 24 + ldr r2, _080C70B4 @ =gTasks + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r1, r2 + ldr r0, _080C70B8 @ =Task_WateringBerryTreeAnim_1 + str r0, [r1] + bx lr + .align 2, 0 +_080C70B4: .4byte gTasks +_080C70B8: .4byte Task_WateringBerryTreeAnim_1 + thumb_func_end Task_WateringBerryTreeAnim_0 + + thumb_func_start Task_WateringBerryTreeAnim_1 +Task_WateringBerryTreeAnim_1: @ 80C70BC + push {r4,r5,lr} + lsls r0, 24 + lsrs r5, r0, 24 + ldr r0, _080C7120 @ =gPlayerAvatar + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, _080C7124 @ =gMapObjects + adds r4, r0, r1 + adds r0, r4, 0 + bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive + lsls r0, 24 + cmp r0, 0 + beq _080C70E8 + adds r0, r4, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished + lsls r0, 24 + cmp r0, 0 + beq _080C711A +_080C70E8: + bl player_get_direction_lower_nybble + lsls r0, 24 + lsrs r0, 24 + bl sub_8059D08 + bl player_get_direction_lower_nybble + lsls r0, 24 + lsrs r0, 24 + bl GetStepInPlaceDelay16AnimId + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r4, 0 + bl FieldObjectSetSpecialAnim + ldr r1, _080C7128 @ =gTasks + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + adds r0, r1 + ldr r1, _080C712C @ =Task_WateringBerryTreeAnim_2 + str r1, [r0] +_080C711A: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080C7120: .4byte gPlayerAvatar +_080C7124: .4byte gMapObjects +_080C7128: .4byte gTasks +_080C712C: .4byte Task_WateringBerryTreeAnim_2 + thumb_func_end Task_WateringBerryTreeAnim_1 + + thumb_func_start Task_WateringBerryTreeAnim_2 +Task_WateringBerryTreeAnim_2: @ 80C7130 + push {r4,r5,lr} + lsls r0, 24 + lsrs r4, r0, 24 + ldr r0, _080C7184 @ =gPlayerAvatar + ldrb r1, [r0, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + ldr r1, _080C7188 @ =gMapObjects + adds r5, r0, r1 + adds r0, r5, 0 + bl FieldObjectClearAnimIfSpecialAnimFinished + lsls r0, 24 + cmp r0, 0 + beq _080C7194 + ldr r1, _080C718C @ =gTasks + lsls r0, r4, 2 + adds r0, r4 + lsls r0, 3 + adds r2, r0, r1 + ldrh r0, [r2, 0xA] + adds r1, r0, 0x1 + strh r1, [r2, 0xA] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x9 + bgt _080C7190 + bl player_get_direction_lower_nybble + lsls r0, 24 + lsrs r0, 24 + bl GetStepInPlaceDelay16AnimId + adds r1, r0, 0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r5, 0 + bl FieldObjectSetSpecialAnim + b _080C7194 + .align 2, 0 +_080C7184: .4byte gPlayerAvatar +_080C7188: .4byte gMapObjects +_080C718C: .4byte gTasks +_080C7190: + ldr r0, _080C719C @ =Task_WateringBerryTreeAnim_3 + str r0, [r2] +_080C7194: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080C719C: .4byte Task_WateringBerryTreeAnim_3 + thumb_func_end Task_WateringBerryTreeAnim_2 + + thumb_func_start Task_WateringBerryTreeAnim_3 +Task_WateringBerryTreeAnim_3: @ 80C71A0 + push {r4,lr} + adds r4, r0, 0 + lsls r4, 24 + lsrs r4, 24 + bl sub_80597D0 + lsls r0, 24 + lsrs r0, 24 + bl SetPlayerAvatarTransitionFlags + adds r0, r4, 0 + bl DestroyTask + bl EnableBothScriptContexts + pop {r4} + pop {r0} + bx r0 + thumb_func_end Task_WateringBerryTreeAnim_3 + + thumb_func_start DoWateringBerryTreeAnim +DoWateringBerryTreeAnim: @ 80C71C4 + push {lr} + ldr r0, _080C71D4 @ =Task_WateringBerryTreeAnim_0 + movs r1, 0x50 + bl CreateTask + pop {r0} + bx r0 + .align 2, 0 +_080C71D4: .4byte Task_WateringBerryTreeAnim_0 + thumb_func_end DoWateringBerryTreeAnim + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/fldeff_decoration.s b/asm/fldeff_decoration.s new file mode 100755 index 000000000..38c5a6e61 --- /dev/null +++ b/asm/fldeff_decoration.s @@ -0,0 +1,907 @@ + .include "constants/gba_constants.inc" + .include "constants/species_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_80C68A4 +sub_80C68A4: @ 80C68A4 + push {r4-r6,lr} + adds r4, r0, 0 + adds r5, r1, 0 + adds r6, r2, 0 + lsls r4, 16 + lsrs r4, 16 + lsls r5, 16 + lsrs r5, 16 + lsls r6, 16 + lsrs r6, 16 + ldr r0, _080C68E4 @ =sub_80C68EC + movs r1, 0 + bl CreateTask + lsls r0, 24 + lsrs r0, 24 + ldr r2, _080C68E8 @ =gTasks + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r1, r2 + movs r0, 0 + strh r4, [r1, 0x8] + strh r5, [r1, 0xA] + strh r6, [r1, 0xC] + strh r0, [r1, 0xE] + movs r0, 0x1 + strh r0, [r1, 0x10] + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080C68E4: .4byte sub_80C68EC +_080C68E8: .4byte gTasks + thumb_func_end sub_80C68A4 + + thumb_func_start sub_80C68EC +sub_80C68EC: @ 80C68EC + push {r4,r5,lr} + lsls r0, 24 + lsrs r5, r0, 24 + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + ldr r1, _080C690C @ =gTasks + 0x8 + adds r4, r0, r1 + ldrh r1, [r4, 0x6] + movs r2, 0x6 + ldrsh r0, [r4, r2] + cmp r0, 0x6 + bne _080C6910 + movs r0, 0 + b _080C6912 + .align 2, 0 +_080C690C: .4byte gTasks + 0x8 +_080C6910: + adds r0, r1, 0x1 +_080C6912: + strh r0, [r4, 0x6] + movs r3, 0x6 + ldrsh r0, [r4, r3] + cmp r0, 0 + bne _080C6964 + movs r1, 0x8 + ldrsh r0, [r4, r1] + cmp r0, 0x2 + bne _080C692C + movs r2, 0 + ldrsh r0, [r4, r2] + bl DoBalloonSoundEffect +_080C692C: + movs r3, 0x2 + ldrsh r0, [r4, r3] + movs r2, 0x4 + ldrsh r1, [r4, r2] + ldrh r2, [r4, 0x8] + ldrh r3, [r4] + adds r2, r3 + lsls r2, 16 + lsrs r2, 16 + bl MapGridSetMetatileIdAt + movs r1, 0x2 + ldrsh r0, [r4, r1] + movs r2, 0x4 + ldrsh r1, [r4, r2] + bl CurrentMapDrawMetatileAt + ldrh r1, [r4, 0x8] + movs r3, 0x8 + ldrsh r0, [r4, r3] + cmp r0, 0x3 + bne _080C6960 + adds r0, r5, 0 + bl DestroyTask + b _080C6964 +_080C6960: + adds r0, r1, 0x1 + strh r0, [r4, 0x8] +_080C6964: + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end sub_80C68EC + + thumb_func_start DoBalloonSoundEffect +DoBalloonSoundEffect: @ 80C696C + push {lr} + lsls r0, 16 + asrs r1, r0, 16 + movs r0, 0xCE + lsls r0, 2 + cmp r1, r0 + beq _080C6998 + cmp r1, r0 + bgt _080C6988 + movs r0, 0x8A + lsls r0, 2 + cmp r1, r0 + beq _080C69B0 + b _080C69B6 +_080C6988: + movs r0, 0xCF + lsls r0, 2 + cmp r1, r0 + beq _080C69A0 + adds r0, 0x4 + cmp r1, r0 + beq _080C69A8 + b _080C69B6 +_080C6998: + movs r0, 0x4A + bl PlaySE + b _080C69B6 +_080C69A0: + movs r0, 0x4B + bl PlaySE + b _080C69B6 +_080C69A8: + movs r0, 0x4C + bl PlaySE + b _080C69B6 +_080C69B0: + movs r0, 0x4E + bl PlaySE +_080C69B6: + pop {r0} + bx r0 + thumb_func_end DoBalloonSoundEffect + + thumb_func_start FldEff_Nop47 +FldEff_Nop47: @ 80C69BC + movs r0, 0 + bx lr + thumb_func_end FldEff_Nop47 + + thumb_func_start FldEff_Nop48 +FldEff_Nop48: @ 80C69C0 + movs r0, 0 + bx lr + thumb_func_end FldEff_Nop48 + + thumb_func_start sub_80C69C4 +sub_80C69C4: @ 80C69C4 + push {r4-r6,lr} + adds r5, r0, 0 + adds r4, r1, 0 + lsls r5, 16 + lsrs r5, 16 + lsls r4, 16 + lsrs r4, 16 + movs r0, 0x4D + bl PlaySE + lsls r5, 16 + asrs r5, 16 + lsls r4, 16 + asrs r4, 16 + ldr r2, _080C6A0C @ =0x00000276 + adds r0, r5, 0 + adds r1, r4, 0 + bl MapGridSetMetatileIdAt + subs r6, r4, 0x1 + ldr r2, _080C6A10 @ =0x0000026e + adds r0, r5, 0 + adds r1, r6, 0 + bl MapGridSetMetatileIdAt + adds r0, r5, 0 + adds r1, r4, 0 + bl CurrentMapDrawMetatileAt + adds r0, r5, 0 + adds r1, r6, 0 + bl CurrentMapDrawMetatileAt + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080C6A0C: .4byte 0x00000276 +_080C6A10: .4byte 0x0000026e + thumb_func_end sub_80C69C4 + + thumb_func_start sub_80C6A14 +sub_80C6A14: @ 80C6A14 + push {r4,lr} + lsls r0, 24 + lsrs r4, r0, 24 + ldr r1, _080C6A44 @ =gTasks + lsls r0, r4, 2 + adds r0, r4 + lsls r0, 3 + adds r1, r0, r1 + ldrh r2, [r1, 0x8] + movs r3, 0x8 + ldrsh r0, [r1, r3] + cmp r0, 0x7 + bne _080C6A48 + movs r2, 0xA + ldrsh r0, [r1, r2] + movs r3, 0xC + ldrsh r1, [r1, r3] + bl sub_80C69C4 + adds r0, r4, 0 + bl DestroyTask + b _080C6A4C + .align 2, 0 +_080C6A44: .4byte gTasks +_080C6A48: + adds r0, r2, 0x1 + strh r0, [r1, 0x8] +_080C6A4C: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80C6A14 + + thumb_func_start sub_80C6A54 +sub_80C6A54: @ 80C6A54 + push {r4-r7,lr} + lsls r0, 16 + lsrs r5, r0, 16 + adds r7, r5, 0 + lsls r1, 16 + lsrs r4, r1, 16 + adds r6, r4, 0 + bl player_get_direction_lower_nybble + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne _080C6A7C + lsls r0, r5, 16 + asrs r0, 16 + lsls r1, r4, 16 + asrs r1, 16 + bl sub_80C69C4 + b _080C6A9E +_080C6A7C: + cmp r0, 0x2 + bne _080C6A9E + ldr r0, _080C6AA4 @ =sub_80C6A14 + movs r1, 0x5 + bl CreateTask + lsls r0, 24 + lsrs r0, 24 + ldr r2, _080C6AA8 @ =gTasks + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r1, r2 + movs r0, 0 + strh r0, [r1, 0x8] + strh r7, [r1, 0xA] + strh r6, [r1, 0xC] +_080C6A9E: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C6AA4: .4byte sub_80C6A14 +_080C6AA8: .4byte gTasks + thumb_func_end sub_80C6A54 + + thumb_func_start Task_DecorationSoundEffect +Task_DecorationSoundEffect: @ 80C6AAC + push {r4,lr} + lsls r0, 24 + lsrs r4, r0, 24 + ldr r1, _080C6AE4 @ =gTasks + lsls r0, r4, 2 + adds r0, r4 + lsls r0, 3 + adds r1, r0, r1 + ldrh r2, [r1, 0xA] + movs r3, 0xA + ldrsh r0, [r1, r3] + cmp r0, 0x7 + beq _080C6AC8 + b _080C6C26 +_080C6AC8: + ldr r2, _080C6AE8 @ =0xfffffd88 + adds r0, r2, 0 + ldrh r1, [r1, 0x8] + adds r0, r1 + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x3B + bls _080C6ADA + b _080C6C1E +_080C6ADA: + lsls r0, 2 + ldr r1, _080C6AEC @ =_080C6AF0 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080C6AE4: .4byte gTasks +_080C6AE8: .4byte 0xfffffd88 +_080C6AEC: .4byte _080C6AF0 + .align 2, 0 +_080C6AF0: + .4byte _080C6BE0 + .4byte _080C6BE8 + .4byte _080C6BF0 + .4byte _080C6BF8 + .4byte _080C6C00 + .4byte _080C6C08 + .4byte _080C6C10 + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C1E + .4byte _080C6C18 +_080C6BE0: + movs r0, 0x3E + bl PlaySE + b _080C6C1E +_080C6BE8: + movs r0, 0x3F + bl PlaySE + b _080C6C1E +_080C6BF0: + movs r0, 0x40 + bl PlaySE + b _080C6C1E +_080C6BF8: + movs r0, 0x41 + bl PlaySE + b _080C6C1E +_080C6C00: + movs r0, 0x42 + bl PlaySE + b _080C6C1E +_080C6C08: + movs r0, 0x43 + bl PlaySE + b _080C6C1E +_080C6C10: + movs r0, 0x44 + bl PlaySE + b _080C6C1E +_080C6C18: + movs r0, 0x45 + bl PlaySE +_080C6C1E: + adds r0, r4, 0 + bl DestroyTask + b _080C6C2A +_080C6C26: + adds r0, r2, 0x1 + strh r0, [r1, 0xA] +_080C6C2A: + pop {r4} + pop {r0} + bx r0 + thumb_func_end Task_DecorationSoundEffect + + thumb_func_start DoDecorationSoundEffect +DoDecorationSoundEffect: @ 80C6C30 + push {r4,lr} + adds r4, r0, 0 + lsls r4, 16 + lsrs r4, 16 + ldr r0, _080C6C5C @ =Task_DecorationSoundEffect + movs r1, 0x5 + bl CreateTask + lsls r0, 24 + lsrs r0, 24 + ldr r2, _080C6C60 @ =gTasks + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r1, r2 + movs r0, 0 + strh r4, [r1, 0x8] + strh r0, [r1, 0xA] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080C6C5C: .4byte Task_DecorationSoundEffect +_080C6C60: .4byte gTasks + thumb_func_end DoDecorationSoundEffect + + thumb_func_start SpriteCB_YellowCave4Sparkle +SpriteCB_YellowCave4Sparkle: @ 80C6C64 + push {r4,lr} + adds r4, r0, 0 + ldrh r0, [r4, 0x2E] + adds r0, 0x1 + strh r0, [r4, 0x2E] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x8 + bne _080C6C7C + movs r0, 0xC3 + bl PlaySE +_080C6C7C: + movs r1, 0x2E + ldrsh r0, [r4, r1] + cmp r0, 0x1F + ble _080C6C8A + adds r0, r4, 0 + bl DestroySprite +_080C6C8A: + pop {r4} + pop {r0} + bx r0 + thumb_func_end SpriteCB_YellowCave4Sparkle + + thumb_func_start DoYellowCave4Sparkle +DoYellowCave4Sparkle: @ 80C6C90 + push {r4,lr} + sub sp, 0x4 + ldr r3, _080C6D28 @ =gMapObjects + ldr r2, _080C6D2C @ =gPlayerAvatar + ldrb r1, [r2, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + adds r0, r3 + ldrh r1, [r0, 0x10] + mov r0, sp + strh r1, [r0] + ldrb r1, [r2, 0x5] + lsls r0, r1, 3 + adds r0, r1 + lsls r0, 2 + adds r0, r3 + ldrh r0, [r0, 0x12] + mov r4, sp + adds r4, 0x2 + strh r0, [r4] + mov r0, sp + adds r1, r4, 0 + movs r2, 0x8 + movs r3, 0x4 + bl sub_8060470 + ldr r0, _080C6D30 @ =gFieldEffectObjectTemplatePointers + ldr r0, [r0, 0x58] + mov r1, sp + movs r2, 0 + ldrsh r1, [r1, r2] + movs r3, 0 + ldrsh r2, [r4, r3] + movs r3, 0 + bl CreateSpriteAtEnd + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x40 + beq _080C6D1E + ldr r3, _080C6D34 @ =gSprites + lsls r2, r0, 4 + adds r2, r0 + lsls r2, 2 + adds r4, r2, r3 + movs r0, 0x3E + adds r0, r4 + mov r12, r0 + ldrb r0, [r0] + movs r1, 0x2 + orrs r0, r1 + mov r1, r12 + strb r0, [r1] + ldrb r1, [r4, 0x5] + movs r0, 0xD + negs r0, r0 + ands r0, r1 + movs r1, 0x4 + orrs r0, r1 + movs r1, 0xF + ands r0, r1 + movs r1, 0x50 + orrs r0, r1 + strb r0, [r4, 0x5] + adds r3, 0x1C + adds r2, r3 + ldr r0, _080C6D38 @ =SpriteCB_YellowCave4Sparkle + str r0, [r2] + movs r0, 0 + strh r0, [r4, 0x2E] +_080C6D1E: + add sp, 0x4 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080C6D28: .4byte gMapObjects +_080C6D2C: .4byte gPlayerAvatar +_080C6D30: .4byte gFieldEffectObjectTemplatePointers +_080C6D34: .4byte gSprites +_080C6D38: .4byte SpriteCB_YellowCave4Sparkle + thumb_func_end DoYellowCave4Sparkle + + thumb_func_start FldEff_SandPillar +FldEff_SandPillar: @ 80C6D3C + push {r4,lr} + sub sp, 0x4 + bl ScriptContext2_Enable + mov r4, sp + adds r4, 0x2 + mov r0, sp + adds r1, r4, 0 + bl GetXYCoordsOneStepInFrontOfPlayer + ldr r1, _080C6D78 @ =gFieldEffectArguments + mov r0, sp + movs r2, 0 + ldrsh r0, [r0, r2] + str r0, [r1, 0x14] + movs r3, 0 + ldrsh r0, [r4, r3] + str r0, [r1, 0x18] + bl player_get_direction_lower_nybble + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x2 + beq _080C6DBC + cmp r0, 0x2 + bgt _080C6D7C + cmp r0, 0x1 + beq _080C6D86 + b _080C6E4C + .align 2, 0 +_080C6D78: .4byte gFieldEffectArguments +_080C6D7C: + cmp r0, 0x3 + beq _080C6DEC + cmp r0, 0x4 + beq _080C6E24 + b _080C6E4C +_080C6D86: + ldr r0, _080C6DB0 @ =gSpriteTemplate_83D26A0 + ldr r3, _080C6DB4 @ =gSprites + ldr r1, _080C6DB8 @ =gPlayerAvatar + ldrb r1, [r1, 0x4] + lsls r2, r1, 4 + adds r2, r1 + lsls r2, 2 + adds r2, r3 + ldrh r1, [r2, 0x2] + lsls r1, 23 + lsrs r1, 7 + movs r3, 0x80 + lsls r3, 12 + adds r1, r3 + asrs r1, 16 + ldrb r2, [r2] + adds r2, 0x20 + movs r3, 0 + bl CreateSprite + b _080C6E4C + .align 2, 0 +_080C6DB0: .4byte gSpriteTemplate_83D26A0 +_080C6DB4: .4byte gSprites +_080C6DB8: .4byte gPlayerAvatar +_080C6DBC: + ldr r0, _080C6DE0 @ =gSpriteTemplate_83D26A0 + ldr r3, _080C6DE4 @ =gSprites + ldr r1, _080C6DE8 @ =gPlayerAvatar + ldrb r1, [r1, 0x4] + lsls r2, r1, 4 + adds r2, r1 + lsls r2, 2 + adds r2, r3 + ldrh r1, [r2, 0x2] + lsls r1, 23 + lsrs r1, 7 + movs r3, 0x80 + lsls r3, 12 + adds r1, r3 + asrs r1, 16 + ldrb r2, [r2] + b _080C6E0C + .align 2, 0 +_080C6DE0: .4byte gSpriteTemplate_83D26A0 +_080C6DE4: .4byte gSprites +_080C6DE8: .4byte gPlayerAvatar +_080C6DEC: + ldr r0, _080C6E14 @ =gSpriteTemplate_83D26A0 + ldr r3, _080C6E18 @ =gSprites + ldr r1, _080C6E1C @ =gPlayerAvatar + ldrb r1, [r1, 0x4] + lsls r2, r1, 4 + adds r2, r1 + lsls r2, 2 + adds r2, r3 + ldrh r1, [r2, 0x2] + lsls r1, 23 + lsrs r1, 7 + ldr r3, _080C6E20 @ =0xfff80000 + adds r1, r3 + asrs r1, 16 + ldrb r2, [r2] + adds r2, 0x10 +_080C6E0C: + movs r3, 0x94 + bl CreateSprite + b _080C6E4C + .align 2, 0 +_080C6E14: .4byte gSpriteTemplate_83D26A0 +_080C6E18: .4byte gSprites +_080C6E1C: .4byte gPlayerAvatar +_080C6E20: .4byte 0xfff80000 +_080C6E24: + ldr r0, _080C6E58 @ =gSpriteTemplate_83D26A0 + ldr r3, _080C6E5C @ =gSprites + ldr r1, _080C6E60 @ =gPlayerAvatar + ldrb r1, [r1, 0x4] + lsls r2, r1, 4 + adds r2, r1 + lsls r2, 2 + adds r2, r3 + ldrh r1, [r2, 0x2] + lsls r1, 23 + lsrs r1, 7 + movs r3, 0xC0 + lsls r3, 13 + adds r1, r3 + asrs r1, 16 + ldrb r2, [r2] + adds r2, 0x10 + movs r3, 0x94 + bl CreateSprite +_080C6E4C: + movs r0, 0 + add sp, 0x4 + pop {r4} + pop {r1} + bx r1 + .align 2, 0 +_080C6E58: .4byte gSpriteTemplate_83D26A0 +_080C6E5C: .4byte gSprites +_080C6E60: .4byte gPlayerAvatar + thumb_func_end FldEff_SandPillar + + thumb_func_start SpriteCB_SandPillar_0 +SpriteCB_SandPillar_0: @ 80C6E64 + push {r4,r5,lr} + adds r5, r0, 0 + movs r0, 0x83 + bl PlaySE + ldr r4, _080C6E90 @ =gFieldEffectArguments + ldr r0, [r4, 0x14] + ldr r1, [r4, 0x18] + subs r1, 0x1 + bl MapGridGetMetatileIdAt + ldr r1, _080C6E94 @ =0x00000286 + cmp r0, r1 + bne _080C6E9C + ldr r0, [r4, 0x14] + ldr r1, [r4, 0x18] + subs r1, 0x1 + ldr r2, _080C6E98 @ =0x00000e02 + bl MapGridSetMetatileIdAt + b _080C6EAA + .align 2, 0 +_080C6E90: .4byte gFieldEffectArguments +_080C6E94: .4byte 0x00000286 +_080C6E98: .4byte 0x00000e02 +_080C6E9C: + ldr r0, [r4, 0x14] + ldr r1, [r4, 0x18] + subs r1, 0x1 + movs r2, 0xA1 + lsls r2, 2 + bl MapGridSetMetatileIdAt +_080C6EAA: + ldr r4, _080C6ED8 @ =gFieldEffectArguments + ldr r0, [r4, 0x14] + ldr r1, [r4, 0x18] + ldr r2, _080C6EDC @ =0x0000020a + bl MapGridSetMetatileIdAt + ldr r0, [r4, 0x14] + ldr r1, [r4, 0x18] + subs r1, 0x1 + bl CurrentMapDrawMetatileAt + ldr r0, [r4, 0x14] + ldr r1, [r4, 0x18] + bl CurrentMapDrawMetatileAt + movs r0, 0 + strh r0, [r5, 0x2E] + ldr r0, _080C6EE0 @ =SpriteCB_SandPillar_1 + str r0, [r5, 0x1C] + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080C6ED8: .4byte gFieldEffectArguments +_080C6EDC: .4byte 0x0000020a +_080C6EE0: .4byte SpriteCB_SandPillar_1 + thumb_func_end SpriteCB_SandPillar_0 + + thumb_func_start SpriteCB_SandPillar_1 +SpriteCB_SandPillar_1: @ 80C6EE4 + push {r4,r5,lr} + adds r5, r0, 0 + ldrh r1, [r5, 0x2E] + movs r2, 0x2E + ldrsh r0, [r5, r2] + cmp r0, 0x11 + bgt _080C6EF8 + adds r0, r1, 0x1 + strh r0, [r5, 0x2E] + b _080C6F14 +_080C6EF8: + ldr r4, _080C6F1C @ =gFieldEffectArguments + ldr r0, [r4, 0x14] + ldr r1, [r4, 0x18] + ldr r2, _080C6F20 @ =0x00000e8c + bl MapGridSetMetatileIdAt + ldr r0, [r4, 0x14] + ldr r1, [r4, 0x18] + bl CurrentMapDrawMetatileAt + movs r0, 0 + strh r0, [r5, 0x2E] + ldr r0, _080C6F24 @ =SpriteCB_SandPillar_2 + str r0, [r5, 0x1C] +_080C6F14: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080C6F1C: .4byte gFieldEffectArguments +_080C6F20: .4byte 0x00000e8c +_080C6F24: .4byte SpriteCB_SandPillar_2 + thumb_func_end SpriteCB_SandPillar_1 + + thumb_func_start SpriteCB_SandPillar_2 +SpriteCB_SandPillar_2: @ 80C6F28 + push {lr} + movs r1, 0x34 + bl FieldEffectStop + bl EnableBothScriptContexts + pop {r0} + bx r0 + thumb_func_end SpriteCB_SandPillar_2 + + thumb_func_start GetShieldToyTVDecorationInfo +GetShieldToyTVDecorationInfo: @ 80C6F38 + push {r4,lr} + sub sp, 0x4 + mov r4, sp + adds r4, 0x2 + mov r0, sp + adds r1, r4, 0 + bl GetXYCoordsOneStepInFrontOfPlayer + mov r0, sp + movs r1, 0 + ldrsh r0, [r0, r1] + movs r2, 0 + ldrsh r1, [r4, r2] + bl MapGridGetMetatileIdAt + adds r1, r0, 0 + ldr r0, _080C6F70 @ =0x000002f5 + cmp r1, r0 + beq _080C6FE8 + cmp r1, r0 + bgt _080C6F74 + subs r0, 0x17 + cmp r1, r0 + beq _080C6FB0 + adds r0, 0x16 + cmp r1, r0 + beq _080C6FDC + b _080C6FFA + .align 2, 0 +_080C6F70: .4byte 0x000002f5 +_080C6F74: + ldr r0, _080C6F9C @ =0x000002f6 + cmp r1, r0 + beq _080C6FF4 + adds r0, 0x40 + cmp r1, r0 + bne _080C6FFA + ldr r0, _080C6FA0 @ =gStringVar1 + movs r1, 0x64 + movs r2, 0 + movs r3, 0x3 + bl ConvertIntToDecimalStringN + ldr r0, _080C6FA4 @ =gStringVar2 + ldr r1, _080C6FA8 @ =gSecretBaseText_GoldRank + bl StringCopy + ldr r1, _080C6FAC @ =gScriptResult + movs r0, 0 + b _080C6FF8 + .align 2, 0 +_080C6F9C: .4byte 0x000002f6 +_080C6FA0: .4byte gStringVar1 +_080C6FA4: .4byte gStringVar2 +_080C6FA8: .4byte gSecretBaseText_GoldRank +_080C6FAC: .4byte gScriptResult +_080C6FB0: + ldr r0, _080C6FCC @ =gStringVar1 + movs r1, 0x32 + movs r2, 0 + movs r3, 0x2 + bl ConvertIntToDecimalStringN + ldr r0, _080C6FD0 @ =gStringVar2 + ldr r1, _080C6FD4 @ =gSecretBaseText_SilverRank + bl StringCopy + ldr r1, _080C6FD8 @ =gScriptResult + movs r0, 0 + b _080C6FF8 + .align 2, 0 +_080C6FCC: .4byte gStringVar1 +_080C6FD0: .4byte gStringVar2 +_080C6FD4: .4byte gSecretBaseText_SilverRank +_080C6FD8: .4byte gScriptResult +_080C6FDC: + ldr r1, _080C6FE4 @ =gScriptResult + movs r0, 0x1 + b _080C6FF8 + .align 2, 0 +_080C6FE4: .4byte gScriptResult +_080C6FE8: + ldr r1, _080C6FF0 @ =gScriptResult + movs r0, 0x2 + b _080C6FF8 + .align 2, 0 +_080C6FF0: .4byte gScriptResult +_080C6FF4: + ldr r1, _080C7004 @ =gScriptResult + movs r0, 0x3 +_080C6FF8: + strh r0, [r1] +_080C6FFA: + add sp, 0x4 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080C7004: .4byte gScriptResult + thumb_func_end GetShieldToyTVDecorationInfo + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/fldeff_pc.s b/asm/fldeff_pc.s new file mode 100755 index 000000000..32afe2050 --- /dev/null +++ b/asm/fldeff_pc.s @@ -0,0 +1,190 @@ + .include "constants/gba_constants.inc" + .include "constants/species_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start FldEff_PCTurnOn +FldEff_PCTurnOn: @ 80C6718 + push {r4,lr} + sub sp, 0x4 + mov r4, sp + adds r4, 0x2 + mov r0, sp + adds r1, r4, 0 + bl GetXYCoordsOneStepInFrontOfPlayer + ldr r0, _080C6758 @ =sub_80C6760 + movs r1, 0 + bl CreateTask + lsls r0, 24 + lsrs r0, 24 + ldr r2, _080C675C @ =gTasks + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r1, r2 + mov r0, sp + ldrh r0, [r0] + movs r2, 0 + strh r0, [r1, 0x8] + ldrh r0, [r4] + strh r0, [r1, 0xA] + strh r2, [r1, 0xC] + movs r0, 0 + add sp, 0x4 + pop {r4} + pop {r1} + bx r1 + .align 2, 0 +_080C6758: .4byte sub_80C6760 +_080C675C: .4byte gTasks + thumb_func_end FldEff_PCTurnOn + + thumb_func_start sub_80C6760 +sub_80C6760: @ 80C6760 + push {r4,r5,lr} + lsls r0, 24 + lsrs r5, r0, 24 + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + ldr r1, _080C6788 @ =gTasks + 0x8 + adds r4, r0, r1 + ldrh r0, [r4, 0x4] + subs r0, 0x4 + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x10 + bhi _080C682E + lsls r0, 2 + ldr r1, _080C678C @ =_080C6790 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080C6788: .4byte gTasks + 0x8 +_080C678C: .4byte _080C6790 + .align 2, 0 +_080C6790: + .4byte _080C67D4 + .4byte _080C682E + .4byte _080C682E + .4byte _080C682E + .4byte _080C67E2 + .4byte _080C682E + .4byte _080C682E + .4byte _080C682E + .4byte _080C67D4 + .4byte _080C682E + .4byte _080C682E + .4byte _080C682E + .4byte _080C67E2 + .4byte _080C682E + .4byte _080C682E + .4byte _080C682E + .4byte _080C6800 +_080C67D4: + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + movs r2, 0x89 + lsls r2, 2 + b _080C67EE +_080C67E2: + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + movs r2, 0x88 + lsls r2, 2 +_080C67EE: + bl MapGridSetMetatileIdAt + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + bl CurrentMapDrawMetatileAt + b _080C682E +_080C6800: + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + movs r2, 0x89 + lsls r2, 2 + bl MapGridSetMetatileIdAt + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + bl CurrentMapDrawMetatileAt + movs r0, 0x3D + bl FieldEffectActiveListRemove + bl EnableBothScriptContexts + adds r0, r5, 0 + bl DestroyTask + b _080C6834 +_080C682E: + ldrh r0, [r4, 0x4] + adds r0, 0x1 + strh r0, [r4, 0x4] +_080C6834: + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end sub_80C6760 + + thumb_func_start sub_80C683C +sub_80C683C: @ 80C683C + push {r4,lr} + sub sp, 0x4 + mov r4, sp + adds r4, 0x2 + mov r0, sp + adds r1, r4, 0 + bl GetXYCoordsOneStepInFrontOfPlayer + movs r0, 0x3 + bl PlaySE + ldr r0, _080C6874 @ =0x00004054 + bl VarGet + lsls r0, 16 + cmp r0, 0 + bne _080C6878 + mov r0, sp + movs r1, 0 + ldrsh r0, [r0, r1] + movs r2, 0 + ldrsh r1, [r4, r2] + movs r2, 0xE2 + lsls r2, 4 + bl MapGridSetMetatileIdAt + b _080C6888 + .align 2, 0 +_080C6874: .4byte 0x00004054 +_080C6878: + mov r0, sp + movs r1, 0 + ldrsh r0, [r0, r1] + movs r2, 0 + ldrsh r1, [r4, r2] + ldr r2, _080C68A0 @ =0x00000e21 + bl MapGridSetMetatileIdAt +_080C6888: + mov r0, sp + movs r1, 0 + ldrsh r0, [r0, r1] + movs r2, 0 + ldrsh r1, [r4, r2] + bl CurrentMapDrawMetatileAt + add sp, 0x4 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080C68A0: .4byte 0x00000e21 + thumb_func_end sub_80C683C + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/fldeff_poison.s b/asm/fldeff_poison.s new file mode 100755 index 000000000..e76ccba05 --- /dev/null +++ b/asm/fldeff_poison.s @@ -0,0 +1,99 @@ + .include "constants/gba_constants.inc" + .include "constants/species_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start Task_FieldPoisonEffect +Task_FieldPoisonEffect: @ 80C7008 + push {lr} + lsls r0, 24 + lsrs r2, r0, 24 + lsls r0, r2, 2 + adds r0, r2 + lsls r0, 3 + ldr r1, _080C702C @ =gTasks + 0x8 + adds r1, r0, r1 + movs r3, 0 + ldrsh r0, [r1, r3] + cmp r0, 0x1 + beq _080C7046 + cmp r0, 0x1 + bgt _080C7030 + cmp r0, 0 + beq _080C7036 + b _080C7062 + .align 2, 0 +_080C702C: .4byte gTasks + 0x8 +_080C7030: + cmp r0, 0x2 + beq _080C705A + b _080C7062 +_080C7036: + ldrh r0, [r1, 0x2] + adds r0, 0x2 + strh r0, [r1, 0x2] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x8 + ble _080C7062 + b _080C7052 +_080C7046: + ldrh r0, [r1, 0x2] + subs r0, 0x2 + strh r0, [r1, 0x2] + lsls r0, 16 + cmp r0, 0 + bne _080C7062 +_080C7052: + ldrh r0, [r1] + adds r0, 0x1 + strh r0, [r1] + b _080C7062 +_080C705A: + adds r0, r2, 0 + bl DestroyTask + b _080C706C +_080C7062: + ldr r2, _080C7070 @ =REG_MOSAIC + ldrh r1, [r1, 0x2] + lsls r0, r1, 4 + orrs r0, r1 + strh r0, [r2] +_080C706C: + pop {r0} + bx r0 + .align 2, 0 +_080C7070: .4byte REG_MOSAIC + thumb_func_end Task_FieldPoisonEffect + + thumb_func_start DoFieldPoisonEffect +DoFieldPoisonEffect: @ 80C7074 + push {lr} + movs r0, 0x4F + bl PlaySE + ldr r0, _080C7088 @ =Task_FieldPoisonEffect + movs r1, 0x50 + bl CreateTask + pop {r0} + bx r0 + .align 2, 0 +_080C7088: .4byte Task_FieldPoisonEffect + thumb_func_end DoFieldPoisonEffect + + thumb_func_start FieldPoisonEffectIsRunning +FieldPoisonEffectIsRunning: @ 80C708C + push {lr} + ldr r0, _080C709C @ =Task_FieldPoisonEffect + bl FuncIsActiveTask + lsls r0, 24 + lsrs r0, 24 + pop {r1} + bx r1 + .align 2, 0 +_080C709C: .4byte Task_FieldPoisonEffect + thumb_func_end FieldPoisonEffectIsRunning + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/fldeff_recordmixing.s b/asm/fldeff_recordmixing.s new file mode 100755 index 000000000..8c79cdef8 --- /dev/null +++ b/asm/fldeff_recordmixing.s @@ -0,0 +1,94 @@ + .include "constants/gba_constants.inc" + .include "constants/species_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start CreateRecordMixingSprite +CreateRecordMixingSprite: @ 80C71D8 + push {r4,r5,lr} + ldr r0, _080C722C @ =gUnknown_083D2878 + bl LoadSpritePalette + ldr r0, _080C7230 @ =gSpriteTemplate_83D2894 + movs r1, 0 + movs r2, 0 + movs r3, 0x52 + bl CreateSprite + lsls r0, 24 + lsrs r5, r0, 24 + cmp r5, 0x40 + beq _080C7238 + lsls r0, r5, 4 + adds r0, r5 + lsls r0, 2 + ldr r1, _080C7234 @ =gSprites + adds r4, r0, r1 + adds r2, r4, 0 + adds r2, 0x20 + adds r3, r4, 0 + adds r3, 0x22 + movs r0, 0x10 + movs r1, 0xD + bl sub_8060388 + adds r2, r4, 0 + adds r2, 0x3E + ldrb r0, [r2] + movs r1, 0x2 + orrs r0, r1 + strb r0, [r2] + ldrh r0, [r4, 0x20] + adds r0, 0x10 + strh r0, [r4, 0x20] + ldrh r0, [r4, 0x22] + adds r0, 0x2 + strh r0, [r4, 0x22] + adds r0, r5, 0 + b _080C723A + .align 2, 0 +_080C722C: .4byte gUnknown_083D2878 +_080C7230: .4byte gSpriteTemplate_83D2894 +_080C7234: .4byte gSprites +_080C7238: + movs r0, 0x40 +_080C723A: + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end CreateRecordMixingSprite + + thumb_func_start DestroyRecordMixingSprite +DestroyRecordMixingSprite: @ 80C7240 + push {r4-r7,lr} + ldr r4, _080C7274 @ =gSprites + adds r7, r4, 0 + movs r6, 0 + movs r5, 0x3F +_080C724A: + adds r0, r7, 0 + adds r0, 0x14 + adds r0, r6, r0 + ldr r1, [r0] + ldr r0, _080C7278 @ =gSpriteTemplate_83D2894 + cmp r1, r0 + bne _080C7264 + adds r0, r4, 0 + bl FreeSpritePalette + adds r0, r4, 0 + bl DestroySprite +_080C7264: + adds r4, 0x44 + adds r6, 0x44 + subs r5, 0x1 + cmp r5, 0 + bge _080C724A + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C7274: .4byte gSprites +_080C7278: .4byte gSpriteTemplate_83D2894 + thumb_func_end DestroyRecordMixingSprite + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/fldeff_secretpower.s b/asm/fldeff_secretpower.s new file mode 100755 index 000000000..a8e9b5883 --- /dev/null +++ b/asm/fldeff_secretpower.s @@ -0,0 +1,640 @@ + .include "constants/gba_constants.inc" + .include "constants/species_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_80C6264 +sub_80C6264: @ 80C6264 + push {lr} + ldr r0, _080C6278 @ =gUnknown_0203923C + ldr r1, _080C627C @ =gMapHeader + ldr r1, [r1, 0x4] + bl sub_80BBFD8 + bl sub_80BB5E4 + pop {r0} + bx r0 + .align 2, 0 +_080C6278: .4byte gUnknown_0203923C +_080C627C: .4byte gMapHeader + thumb_func_end sub_80C6264 + + thumb_func_start sub_80C6280 +sub_80C6280: @ 80C6280 + push {lr} + ldr r1, _080C6294 @ =gFieldEffectArguments + ldr r0, [r1, 0x4] + cmp r0, 0x2 + beq _080C62AA + cmp r0, 0x2 + bgt _080C6298 + cmp r0, 0x1 + beq _080C62A2 + b _080C62BE + .align 2, 0 +_080C6294: .4byte gFieldEffectArguments +_080C6298: + cmp r0, 0x3 + beq _080C62AE + cmp r0, 0x4 + beq _080C62B8 + b _080C62BE +_080C62A2: + movs r0, 0x8 + str r0, [r1, 0x14] + movs r0, 0x28 + b _080C62BC +_080C62AA: + movs r0, 0x8 + b _080C62BA +_080C62AE: + movs r0, 0x8 + negs r0, r0 + str r0, [r1, 0x14] + movs r0, 0x18 + b _080C62BC +_080C62B8: + movs r0, 0x18 +_080C62BA: + str r0, [r1, 0x14] +_080C62BC: + str r0, [r1, 0x18] +_080C62BE: + pop {r0} + bx r0 + thumb_func_end sub_80C6280 + + thumb_func_start SetUpFieldMove_SecretPower +SetUpFieldMove_SecretPower: @ 80C62C4 + push {r4,lr} + bl sub_80BB63C + ldr r0, _080C6318 @ =gScriptResult + ldrh r0, [r0] + cmp r0, 0x1 + beq _080C636E + bl player_get_direction_lower_nybble + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x2 + bne _080C636E + ldr r4, _080C631C @ =gUnknown_0203923C + adds r1, r4, 0x2 + adds r0, r4, 0 + bl GetXYCoordsOneStepInFrontOfPlayer + movs r1, 0 + ldrsh r0, [r4, r1] + movs r2, 0x2 + ldrsh r1, [r4, r2] + bl MapGridGetMetatileBehaviorAt + lsls r0, 24 + lsrs r4, r0, 24 + adds r0, r4, 0 + bl MetatileBehavior_IsSecretBaseCave + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne _080C6330 + bl sub_80C6264 + ldr r1, _080C6320 @ =gFieldCallback + ldr r0, _080C6324 @ =FieldCallback_Teleport + str r0, [r1] + ldr r1, _080C6328 @ =gUnknown_03005CE4 + ldr r0, _080C632C @ =sub_80C639C + b _080C6380 + .align 2, 0 +_080C6318: .4byte gScriptResult +_080C631C: .4byte gUnknown_0203923C +_080C6320: .4byte gFieldCallback +_080C6324: .4byte FieldCallback_Teleport +_080C6328: .4byte gUnknown_03005CE4 +_080C632C: .4byte sub_80C639C +_080C6330: + adds r0, r4, 0 + bl MetatileBehavior_IsSecretBaseTree + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bne _080C6360 + bl sub_80C6264 + ldr r1, _080C6350 @ =gFieldCallback + ldr r0, _080C6354 @ =FieldCallback_Teleport + str r0, [r1] + ldr r1, _080C6358 @ =gUnknown_03005CE4 + ldr r0, _080C635C @ =sub_80C64A8 + b _080C6380 + .align 2, 0 +_080C6350: .4byte gFieldCallback +_080C6354: .4byte FieldCallback_Teleport +_080C6358: .4byte gUnknown_03005CE4 +_080C635C: .4byte sub_80C64A8 +_080C6360: + adds r0, r4, 0 + bl MetatileBehavior_IsSecretBaseShrub + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + beq _080C6372 +_080C636E: + movs r0, 0 + b _080C6384 +_080C6372: + bl sub_80C6264 + ldr r1, _080C638C @ =gFieldCallback + ldr r0, _080C6390 @ =FieldCallback_Teleport + str r0, [r1] + ldr r1, _080C6394 @ =gUnknown_03005CE4 + ldr r0, _080C6398 @ =sub_80C660C +_080C6380: + str r0, [r1] + movs r0, 0x1 +_080C6384: + pop {r4} + pop {r1} + bx r1 + .align 2, 0 +_080C638C: .4byte gFieldCallback +_080C6390: .4byte FieldCallback_Teleport +_080C6394: .4byte gUnknown_03005CE4 +_080C6398: .4byte sub_80C660C + thumb_func_end SetUpFieldMove_SecretPower + + thumb_func_start sub_80C639C +sub_80C639C: @ 80C639C + push {lr} + ldr r1, _080C63B0 @ =gFieldEffectArguments + ldr r0, _080C63B4 @ =gLastFieldPokeMenuOpened + ldrb r0, [r0] + str r0, [r1] + ldr r0, _080C63B8 @ =gUnknown_081A2CE6 + bl ScriptContext1_SetupScript + pop {r0} + bx r0 + .align 2, 0 +_080C63B0: .4byte gFieldEffectArguments +_080C63B4: .4byte gLastFieldPokeMenuOpened +_080C63B8: .4byte gUnknown_081A2CE6 + thumb_func_end sub_80C639C + + thumb_func_start FldEff_UseSecretPowerCave +FldEff_UseSecretPowerCave: @ 80C63BC + push {lr} + bl oei_task_add + lsls r0, 24 + lsrs r0, 24 + ldr r2, _080C63E0 @ =gTasks + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r1, r2 + ldr r2, _080C63E4 @ =sub_80C63E8 + lsrs r0, r2, 16 + strh r0, [r1, 0x18] + strh r2, [r1, 0x1A] + movs r0, 0 + pop {r1} + bx r1 + .align 2, 0 +_080C63E0: .4byte gTasks +_080C63E4: .4byte sub_80C63E8 + thumb_func_end FldEff_UseSecretPowerCave + + thumb_func_start sub_80C63E8 +sub_80C63E8: @ 80C63E8 + push {lr} + movs r0, 0xB + bl FieldEffectActiveListRemove + movs r0, 0x37 + bl FieldEffectStart + pop {r0} + bx r0 + thumb_func_end sub_80C63E8 + + thumb_func_start FldEff_SecretPowerCave +FldEff_SecretPowerCave: @ 80C63FC + push {r4,lr} + bl sub_80C6280 + ldr r0, _080C643C @ =gSpriteTemplate_83D2614 + ldr r3, _080C6440 @ =gSprites + ldr r1, _080C6444 @ =gPlayerAvatar + ldrb r1, [r1, 0x4] + lsls r2, r1, 4 + adds r2, r1 + lsls r2, 2 + adds r2, r3 + ldrh r1, [r2, 0x2] + lsls r1, 23 + lsrs r1, 23 + ldr r4, _080C6448 @ =gFieldEffectArguments + ldr r3, [r4, 0x14] + adds r1, r3 + lsls r1, 16 + asrs r1, 16 + ldrb r2, [r2] + ldr r3, [r4, 0x18] + adds r2, r3 + lsls r2, 16 + asrs r2, 16 + movs r3, 0x94 + bl CreateSprite + movs r0, 0 + pop {r4} + pop {r1} + bx r1 + .align 2, 0 +_080C643C: .4byte gSpriteTemplate_83D2614 +_080C6440: .4byte gSprites +_080C6444: .4byte gPlayerAvatar +_080C6448: .4byte gFieldEffectArguments + thumb_func_end FldEff_SecretPowerCave + + thumb_func_start sub_80C644C +sub_80C644C: @ 80C644C + push {r4,lr} + adds r4, r0, 0 + movs r0, 0x83 + bl PlaySE + movs r0, 0 + strh r0, [r4, 0x2E] + ldr r0, _080C6464 @ =sub_80C6468 + str r0, [r4, 0x1C] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080C6464: .4byte sub_80C6468 + thumb_func_end sub_80C644C + + thumb_func_start sub_80C6468 +sub_80C6468: @ 80C6468 + push {lr} + adds r1, r0, 0 + ldrh r2, [r1, 0x2E] + movs r3, 0x2E + ldrsh r0, [r1, r3] + cmp r0, 0x27 + bgt _080C6488 + adds r0, r2, 0x1 + strh r0, [r1, 0x2E] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x14 + bne _080C6490 + bl sub_80BB800 + b _080C6490 +_080C6488: + movs r0, 0 + strh r0, [r1, 0x2E] + ldr r0, _080C6494 @ =sub_80C6498 + str r0, [r1, 0x1C] +_080C6490: + pop {r0} + bx r0 + .align 2, 0 +_080C6494: .4byte sub_80C6498 + thumb_func_end sub_80C6468 + + thumb_func_start sub_80C6498 +sub_80C6498: @ 80C6498 + push {lr} + movs r1, 0x37 + bl FieldEffectStop + bl EnableBothScriptContexts + pop {r0} + bx r0 + thumb_func_end sub_80C6498 + + thumb_func_start sub_80C64A8 +sub_80C64A8: @ 80C64A8 + push {lr} + ldr r1, _080C64BC @ =gFieldEffectArguments + ldr r0, _080C64C0 @ =gLastFieldPokeMenuOpened + ldrb r0, [r0] + str r0, [r1] + ldr r0, _080C64C4 @ =gUnknown_081A2D3E + bl ScriptContext1_SetupScript + pop {r0} + bx r0 + .align 2, 0 +_080C64BC: .4byte gFieldEffectArguments +_080C64C0: .4byte gLastFieldPokeMenuOpened +_080C64C4: .4byte gUnknown_081A2D3E + thumb_func_end sub_80C64A8 + + thumb_func_start FldEff_UseSecretPowerTree +FldEff_UseSecretPowerTree: @ 80C64C8 + push {lr} + bl oei_task_add + lsls r0, 24 + lsrs r0, 24 + ldr r2, _080C64EC @ =gTasks + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r1, r2 + ldr r2, _080C64F0 @ =sub_80C64F4 + lsrs r0, r2, 16 + strh r0, [r1, 0x18] + strh r2, [r1, 0x1A] + movs r0, 0 + pop {r1} + bx r1 + .align 2, 0 +_080C64EC: .4byte gTasks +_080C64F0: .4byte sub_80C64F4 + thumb_func_end FldEff_UseSecretPowerTree + + thumb_func_start sub_80C64F4 +sub_80C64F4: @ 80C64F4 + push {lr} + movs r0, 0x1A + bl FieldEffectActiveListRemove + movs r0, 0x38 + bl FieldEffectStart + pop {r0} + bx r0 + thumb_func_end sub_80C64F4 + + thumb_func_start FldEff_SecretPowerTree +FldEff_SecretPowerTree: @ 80C6508 + push {r4,lr} + ldr r1, _080C6580 @ =gUnknown_0203923C + movs r2, 0 + ldrsh r0, [r1, r2] + movs r2, 0x2 + ldrsh r1, [r1, r2] + bl MapGridGetMetatileBehaviorAt + adds r2, r0, 0 + ldr r1, _080C6584 @ =0x00000fff + adds r0, r1, 0 + ands r2, r0 + cmp r2, 0x96 + bne _080C652A + ldr r1, _080C6588 @ =gFieldEffectArguments + movs r0, 0 + str r0, [r1, 0x1C] +_080C652A: + cmp r2, 0x9C + bne _080C6534 + ldr r1, _080C6588 @ =gFieldEffectArguments + movs r0, 0x2 + str r0, [r1, 0x1C] +_080C6534: + bl sub_80C6280 + ldr r0, _080C658C @ =gSpriteTemplate_83D262C + ldr r3, _080C6590 @ =gSprites + ldr r1, _080C6594 @ =gPlayerAvatar + ldrb r1, [r1, 0x4] + lsls r2, r1, 4 + adds r2, r1 + lsls r2, 2 + adds r2, r3 + ldrh r1, [r2, 0x2] + lsls r1, 23 + lsrs r1, 23 + ldr r4, _080C6588 @ =gFieldEffectArguments + ldr r3, [r4, 0x14] + adds r1, r3 + lsls r1, 16 + asrs r1, 16 + ldrb r2, [r2] + ldr r3, [r4, 0x18] + adds r2, r3 + lsls r2, 16 + asrs r2, 16 + movs r3, 0x94 + bl CreateSprite + ldr r0, [r4, 0x1C] + cmp r0, 0x1 + beq _080C6572 + cmp r0, 0x3 + bne _080C6576 +_080C6572: + bl sub_80BB800 +_080C6576: + movs r0, 0 + pop {r4} + pop {r1} + bx r1 + .align 2, 0 +_080C6580: .4byte gUnknown_0203923C +_080C6584: .4byte 0x00000fff +_080C6588: .4byte gFieldEffectArguments +_080C658C: .4byte gSpriteTemplate_83D262C +_080C6590: .4byte gSprites +_080C6594: .4byte gPlayerAvatar + thumb_func_end FldEff_SecretPowerTree + + thumb_func_start sub_80C6598 +sub_80C6598: @ 80C6598 + push {r4,lr} + adds r4, r0, 0 + movs r0, 0x9B + bl PlaySE + ldr r0, _080C65BC @ =gFieldEffectArguments + ldr r1, [r0, 0x1C] + adds r2, r4, 0 + adds r2, 0x2A + movs r0, 0 + strb r1, [r2] + strh r0, [r4, 0x2E] + ldr r0, _080C65C0 @ =sub_80C65C4 + str r0, [r4, 0x1C] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080C65BC: .4byte gFieldEffectArguments +_080C65C0: .4byte sub_80C65C4 + thumb_func_end sub_80C6598 + + thumb_func_start sub_80C65C4 +sub_80C65C4: @ 80C65C4 + push {r4,lr} + adds r4, r0, 0 + ldrh r0, [r4, 0x2E] + adds r0, 0x1 + strh r0, [r4, 0x2E] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x27 + ble _080C65EE + ldr r0, _080C65F4 @ =gFieldEffectArguments + ldr r0, [r0, 0x1C] + cmp r0, 0 + beq _080C65E2 + cmp r0, 0x2 + bne _080C65E6 +_080C65E2: + bl sub_80BB800 +_080C65E6: + movs r0, 0 + strh r0, [r4, 0x2E] + ldr r0, _080C65F8 @ =sub_80C65FC + str r0, [r4, 0x1C] +_080C65EE: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080C65F4: .4byte gFieldEffectArguments +_080C65F8: .4byte sub_80C65FC + thumb_func_end sub_80C65C4 + + thumb_func_start sub_80C65FC +sub_80C65FC: @ 80C65FC + push {lr} + movs r1, 0x38 + bl FieldEffectStop + bl EnableBothScriptContexts + pop {r0} + bx r0 + thumb_func_end sub_80C65FC + + thumb_func_start sub_80C660C +sub_80C660C: @ 80C660C + push {lr} + ldr r1, _080C6620 @ =gFieldEffectArguments + ldr r0, _080C6624 @ =gLastFieldPokeMenuOpened + ldrb r0, [r0] + str r0, [r1] + ldr r0, _080C6628 @ =gUnknown_081A2D96 + bl ScriptContext1_SetupScript + pop {r0} + bx r0 + .align 2, 0 +_080C6620: .4byte gFieldEffectArguments +_080C6624: .4byte gLastFieldPokeMenuOpened +_080C6628: .4byte gUnknown_081A2D96 + thumb_func_end sub_80C660C + + thumb_func_start FldEff_UseSecretPowerShrub +FldEff_UseSecretPowerShrub: @ 80C662C + push {lr} + bl oei_task_add + lsls r0, 24 + lsrs r0, 24 + ldr r2, _080C6650 @ =gTasks + lsls r1, r0, 2 + adds r1, r0 + lsls r1, 3 + adds r1, r2 + ldr r2, _080C6654 @ =sub_80C6658 + lsrs r0, r2, 16 + strh r0, [r1, 0x18] + strh r2, [r1, 0x1A] + movs r0, 0 + pop {r1} + bx r1 + .align 2, 0 +_080C6650: .4byte gTasks +_080C6654: .4byte sub_80C6658 + thumb_func_end FldEff_UseSecretPowerShrub + + thumb_func_start sub_80C6658 +sub_80C6658: @ 80C6658 + push {lr} + movs r0, 0x1B + bl FieldEffectActiveListRemove + movs r0, 0x39 + bl FieldEffectStart + pop {r0} + bx r0 + thumb_func_end sub_80C6658 + + thumb_func_start FldEff_SecretPowerShrub +FldEff_SecretPowerShrub: @ 80C666C + push {r4,lr} + bl sub_80C6280 + ldr r0, _080C66AC @ =gSpriteTemplate_83D2644 + ldr r3, _080C66B0 @ =gSprites + ldr r1, _080C66B4 @ =gPlayerAvatar + ldrb r1, [r1, 0x4] + lsls r2, r1, 4 + adds r2, r1 + lsls r2, 2 + adds r2, r3 + ldrh r1, [r2, 0x2] + lsls r1, 23 + lsrs r1, 23 + ldr r4, _080C66B8 @ =gFieldEffectArguments + ldr r3, [r4, 0x14] + adds r1, r3 + lsls r1, 16 + asrs r1, 16 + ldrb r2, [r2] + ldr r3, [r4, 0x18] + adds r2, r3 + lsls r2, 16 + asrs r2, 16 + movs r3, 0x94 + bl CreateSprite + movs r0, 0 + pop {r4} + pop {r1} + bx r1 + .align 2, 0 +_080C66AC: .4byte gSpriteTemplate_83D2644 +_080C66B0: .4byte gSprites +_080C66B4: .4byte gPlayerAvatar +_080C66B8: .4byte gFieldEffectArguments + thumb_func_end FldEff_SecretPowerShrub + + thumb_func_start sub_80C66BC +sub_80C66BC: @ 80C66BC + push {r4,lr} + adds r4, r0, 0 + movs r0, 0xA9 + bl PlaySE + movs r0, 0 + strh r0, [r4, 0x2E] + ldr r0, _080C66D4 @ =sub_80C66D8 + str r0, [r4, 0x1C] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080C66D4: .4byte sub_80C66D8 + thumb_func_end sub_80C66BC + + thumb_func_start sub_80C66D8 +sub_80C66D8: @ 80C66D8 + push {lr} + adds r1, r0, 0 + ldrh r2, [r1, 0x2E] + movs r3, 0x2E + ldrsh r0, [r1, r3] + cmp r0, 0x27 + bgt _080C66F8 + adds r0, r2, 0x1 + strh r0, [r1, 0x2E] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x14 + bne _080C6700 + bl sub_80BB800 + b _080C6700 +_080C66F8: + movs r0, 0 + strh r0, [r1, 0x2E] + ldr r0, _080C6704 @ =sub_80C6708 + str r0, [r1, 0x1C] +_080C6700: + pop {r0} + bx r0 + .align 2, 0 +_080C6704: .4byte sub_80C6708 + thumb_func_end sub_80C66D8 + + thumb_func_start sub_80C6708 +sub_80C6708: @ 80C6708 + push {lr} + movs r1, 0x39 + bl FieldEffectStop + bl EnableBothScriptContexts + pop {r0} + bx r0 + thumb_func_end sub_80C6708 + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/pss_effect.s b/asm/pss_effect.s new file mode 100755 index 000000000..d549d85e1 --- /dev/null +++ b/asm/pss_effect.s @@ -0,0 +1,726 @@ + .include "constants/gba_constants.inc" + .include "constants/species_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_80C5CD4 +sub_80C5CD4: @ 80C5CD4 + push {r4-r7,lr} + sub sp, 0x28 + adds r7, r0, 0 + ldr r0, _080C5D64 @ =gUnknown_083D1898 + ldr r1, [r0, 0x4] + ldr r0, [r0] + str r0, [sp, 0x18] + str r1, [sp, 0x1C] + ldr r0, _080C5D68 @ =gUnknown_083D18A0 + ldr r1, [r0, 0x4] + ldr r0, [r0] + str r0, [sp, 0x20] + str r1, [sp, 0x24] + mov r1, sp + ldr r0, _080C5D6C @ =gSpriteTemplate_83D18A8 + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + ldrh r3, [r7] + lsls r2, r3, 16 + add r0, sp, 0x18 + ldrh r1, [r0, 0x4] + orrs r1, r2 + str r1, [r0, 0x4] + mov r1, sp + movs r6, 0 + strh r3, [r1] + ldrh r2, [r7, 0x2] + ldr r5, _080C5D70 @ =0xffff0000 + add r4, sp, 0x20 + ldr r1, [r4, 0x4] + ands r1, r5 + orrs r1, r2 + str r1, [r4, 0x4] + mov r1, sp + strh r2, [r1, 0x2] + bl LoadSpriteSheet + adds r0, r4, 0 + bl LoadSpritePalette + movs r0, 0x1 + strh r0, [r7, 0xC] + strh r6, [r7, 0xA] + strh r6, [r7, 0x8] + ldrh r0, [r7, 0x2] + bl IndexOfSpritePaletteTag + lsls r0, 24 + lsrs r0, 24 + movs r1, 0x80 + lsls r1, 9 + lsls r1, r0 + bics r5, r1 + str r5, [r7, 0x10] + ldrh r0, [r7, 0x4] + cmp r0, 0 + bne _080C5D4E + movs r0, 0x10 + strh r0, [r7, 0x4] +_080C5D4E: + ldrh r0, [r7, 0x6] + cmp r0, 0 + bne _080C5D58 + movs r0, 0x14 + strh r0, [r7, 0x6] +_080C5D58: + ldr r0, _080C5D74 @ =gUnknown_020387EC + str r7, [r0] + movs r4, 0 + ldr r5, _080C5D78 @ =gSprites + b _080C5D94 + .align 2, 0 +_080C5D64: .4byte gUnknown_083D1898 +_080C5D68: .4byte gUnknown_083D18A0 +_080C5D6C: .4byte gSpriteTemplate_83D18A8 +_080C5D70: .4byte 0xffff0000 +_080C5D74: .4byte gUnknown_020387EC +_080C5D78: .4byte gSprites +_080C5D7C: + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r5 + ldrh r1, [r7, 0x4] + cmp r4, 0x3 + bhi _080C5D8C + negs r1, r1 +_080C5D8C: + strh r1, [r0, 0x2E] + adds r0, r4, 0x1 + lsls r0, 16 + lsrs r4, r0, 16 +_080C5D94: + cmp r4, 0x7 + bhi _080C5DB2 + lsls r1, r4, 5 + adds r1, 0x8 + lsls r1, 16 + asrs r1, 16 + mov r0, sp + movs r2, 0x50 + movs r3, 0 + bl CreateSprite + lsls r0, 24 + lsrs r1, r0, 24 + cmp r1, 0x40 + bne _080C5D7C +_080C5DB2: + ldr r1, _080C5DC8 @ =REG_BLDCNT + movs r0, 0xBF + strh r0, [r1] + adds r1, 0x4 + movs r0, 0x10 + strh r0, [r1] + add sp, 0x28 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C5DC8: .4byte REG_BLDCNT + thumb_func_end sub_80C5CD4 + + thumb_func_start sub_80C5DCC +sub_80C5DCC: @ 80C5DCC + push {r4,lr} + ldr r4, _080C5E10 @ =gUnknown_020387EC + ldr r1, [r4] + ldrh r0, [r1, 0x8] + cmp r0, 0 + bne _080C5DF0 + ldr r0, [r1, 0x10] + ldr r2, _080C5E14 @ =0x0000ffff + movs r1, 0x10 + bl BlendPalettes + ldr r0, _080C5E18 @ =sub_80C603C + bl sub_80C61B0 + ldr r1, [r4] + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] +_080C5DF0: + ldr r1, [r4] + ldrh r0, [r1, 0xA] + cmp r0, 0x7 + bls _080C5E0A + ldrh r0, [r1, 0x6] + ldrh r2, [r1, 0xC] + adds r0, r2 + movs r2, 0 + strh r0, [r1, 0xC] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x4F + bgt _080C5E1C +_080C5E0A: + movs r0, 0 + b _080C5E2E + .align 2, 0 +_080C5E10: .4byte gUnknown_020387EC +_080C5E14: .4byte 0x0000ffff +_080C5E18: .4byte sub_80C603C +_080C5E1C: + movs r0, 0x50 + strh r0, [r1, 0xC] + ldr r0, _080C5E34 @ =REG_BLDCNT + strh r2, [r0] + adds r0, 0x4 + strh r2, [r0] + bl ClearGpuRegBits + movs r0, 0x1 +_080C5E2E: + pop {r4} + pop {r1} + bx r1 + .align 2, 0 +_080C5E34: .4byte REG_BLDCNT + thumb_func_end sub_80C5DCC + + thumb_func_start sub_80C5E38 +sub_80C5E38: @ 80C5E38 + push {r4-r7,lr} + sub sp, 0x28 + adds r7, r0, 0 + ldr r0, _080C5EC8 @ =gUnknown_083D1898 + ldr r1, [r0, 0x4] + ldr r0, [r0] + str r0, [sp, 0x18] + str r1, [sp, 0x1C] + ldr r0, _080C5ECC @ =gUnknown_083D18A0 + ldr r1, [r0, 0x4] + ldr r0, [r0] + str r0, [sp, 0x20] + str r1, [sp, 0x24] + mov r1, sp + ldr r0, _080C5ED0 @ =gSpriteTemplate_83D18C0 + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + ldrh r3, [r7] + lsls r2, r3, 16 + add r0, sp, 0x18 + ldrh r1, [r0, 0x4] + orrs r1, r2 + str r1, [r0, 0x4] + mov r1, sp + movs r6, 0 + strh r3, [r1] + ldrh r2, [r7, 0x2] + ldr r5, _080C5ED4 @ =0xffff0000 + add r4, sp, 0x20 + ldr r1, [r4, 0x4] + ands r1, r5 + orrs r1, r2 + str r1, [r4, 0x4] + mov r1, sp + strh r2, [r1, 0x2] + bl LoadSpriteSheet + adds r0, r4, 0 + bl LoadSpritePalette + movs r0, 0x50 + strh r0, [r7, 0xC] + strh r6, [r7, 0x8] + strh r6, [r7, 0xA] + ldrh r0, [r7, 0x2] + bl IndexOfSpritePaletteTag + lsls r0, 24 + lsrs r0, 24 + movs r1, 0x80 + lsls r1, 9 + lsls r1, r0 + bics r5, r1 + str r5, [r7, 0x10] + ldrh r0, [r7, 0x4] + cmp r0, 0 + bne _080C5EB2 + movs r0, 0x10 + strh r0, [r7, 0x4] +_080C5EB2: + ldrh r0, [r7, 0x6] + cmp r0, 0 + bne _080C5EBC + movs r0, 0x14 + strh r0, [r7, 0x6] +_080C5EBC: + ldr r0, _080C5ED8 @ =gUnknown_020387EC + str r7, [r0] + movs r5, 0 + ldr r6, _080C5EDC @ =gSprites + b _080C5F4A + .align 2, 0 +_080C5EC8: .4byte gUnknown_083D1898 +_080C5ECC: .4byte gUnknown_083D18A0 +_080C5ED0: .4byte gSpriteTemplate_83D18C0 +_080C5ED4: .4byte 0xffff0000 +_080C5ED8: .4byte gUnknown_020387EC +_080C5EDC: .4byte gSprites +_080C5EE0: + lsls r2, r3, 4 + adds r1, r2, r3 + lsls r1, 2 + adds r1, r6 + ldrh r0, [r7, 0x4] + strh r0, [r1, 0x2E] + movs r0, 0x1 + strh r0, [r1, 0x30] + ldr r1, _080C5EF4 @ =gSprites + b _080C5F2A + .align 2, 0 +_080C5EF4: .4byte gSprites +_080C5EF8: + lsls r1, r5, 21 + movs r0, 0x80 + lsls r0, 16 + adds r1, r0 + asrs r1, 16 + mov r0, sp + movs r2, 0x50 + movs r3, 0 + bl CreateSprite + lsls r0, 24 + lsrs r3, r0, 24 + cmp r3, 0x40 + beq _080C5F6E + lsls r2, r3, 4 + adds r1, r2, r3 + lsls r1, 2 + adds r1, r6 + ldrh r0, [r7, 0x4] + negs r0, r0 + strh r0, [r1, 0x2E] + ldr r0, _080C5F88 @ =0x0000ffff + strh r0, [r1, 0x30] + ldr r1, _080C5F8C @ =gSprites + lsls r4, r5, 5 +_080C5F2A: + adds r0, r2, r3 + lsls r0, 2 + adds r0, r1 + adds r1, r4, 0 + adds r1, 0x8 + movs r2, 0 + strh r1, [r0, 0x32] + strh r2, [r0, 0x36] + adds r0, 0x3E + ldrb r1, [r0] + movs r2, 0x4 + orrs r1, r2 + strb r1, [r0] + adds r0, r5, 0x1 + lsls r0, 16 + lsrs r5, r0, 16 +_080C5F4A: + cmp r5, 0x7 + bhi _080C5F6E + cmp r5, 0x3 + bhi _080C5EF8 + lsls r4, r5, 5 + adds r1, r4, 0 + subs r1, 0x70 + lsls r1, 16 + asrs r1, 16 + mov r0, sp + movs r2, 0x50 + movs r3, 0 + bl CreateSprite + lsls r0, 24 + lsrs r3, r0, 24 + cmp r3, 0x40 + bne _080C5EE0 +_080C5F6E: + ldr r1, _080C5F90 @ =REG_BLDCNT + movs r0, 0xFF + strh r0, [r1] + adds r1, 0x4 + movs r0, 0x10 + strh r0, [r1] + ldr r0, _080C5F94 @ =sub_80C6078 + bl sub_80C61B0 + add sp, 0x28 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080C5F88: .4byte 0x0000ffff +_080C5F8C: .4byte gSprites +_080C5F90: .4byte REG_BLDCNT +_080C5F94: .4byte sub_80C6078 + thumb_func_end sub_80C5E38 + + thumb_func_start sub_80C5F98 +sub_80C5F98: @ 80C5F98 + push {r4,lr} + ldr r4, _080C5FB0 @ =gUnknown_020387EC + ldr r2, [r4] + ldrh r0, [r2, 0x8] + cmp r0, 0x1 + beq _080C5FEC + cmp r0, 0x1 + bgt _080C5FB4 + cmp r0, 0 + beq _080C5FBA + b _080C602C + .align 2, 0 +_080C5FB0: .4byte gUnknown_020387EC +_080C5FB4: + cmp r0, 0x2 + beq _080C6008 + b _080C602C +_080C5FBA: + ldrh r0, [r2, 0xC] + ldrh r1, [r2, 0x6] + subs r0, r1 + strh r0, [r2, 0xC] + lsls r0, 16 + asrs r0, 16 + cmp r0, 0x1 + bgt _080C6034 + ldr r0, [r2, 0x10] + ldr r2, _080C5FE4 @ =0x0000ffff + movs r1, 0x10 + bl BlendPalettes + ldr r0, _080C5FE8 @ =sub_80C603C + bl SetHBlankCallback + ldr r1, [r4] + movs r0, 0x1 + strh r0, [r1, 0xC] + b _080C6000 + .align 2, 0 +_080C5FE4: .4byte 0x0000ffff +_080C5FE8: .4byte sub_80C603C +_080C5FEC: + ldrh r0, [r2, 0xA] + cmp r0, 0x8 + bne _080C6034 + movs r0, 0x1 + negs r0, r0 + movs r1, 0x10 + movs r2, 0 + bl BlendPalettes + ldr r1, [r4] +_080C6000: + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + b _080C6034 +_080C6008: + ldr r0, _080C6030 @ =REG_BLDCNT + movs r1, 0 + strh r1, [r0] + adds r0, 0x4 + strh r1, [r0] + ldrh r0, [r2] + bl FreeSpriteTilesByTag + ldr r0, [r4] + ldrh r0, [r0, 0x2] + bl FreeSpritePaletteByTag + bl ClearGpuRegBits + ldr r1, [r4] + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] +_080C602C: + movs r0, 0x1 + b _080C6036 + .align 2, 0 +_080C6030: .4byte REG_BLDCNT +_080C6034: + movs r0, 0 +_080C6036: + pop {r4} + pop {r1} + bx r1 + thumb_func_end sub_80C5F98 + + thumb_func_start sub_80C603C +sub_80C603C: @ 80C603C + push {lr} + sub sp, 0x4 + mov r2, sp + ldr r0, _080C6060 @ =REG_VCOUNT + ldrh r1, [r0] + movs r3, 0xFF + adds r0, r3, 0 + ands r0, r1 + strh r0, [r2] + mov r0, sp + ldrh r0, [r0] + cmp r0, 0x50 + bne _080C6068 + ldr r1, _080C6064 @ =REG_BLDCNT + movs r0, 0x8F + strh r0, [r1] + b _080C606C + .align 2, 0 +_080C6060: .4byte REG_VCOUNT +_080C6064: .4byte REG_BLDCNT +_080C6068: + ldr r0, _080C6074 @ =REG_BLDCNT + strh r3, [r0] +_080C606C: + add sp, 0x4 + pop {r0} + bx r0 + .align 2, 0 +_080C6074: .4byte REG_BLDCNT + thumb_func_end sub_80C603C + + thumb_func_start sub_80C6078 +sub_80C6078: @ 80C6078 + push {lr} + sub sp, 0x4 + mov r2, sp + ldr r0, _080C60B0 @ =REG_VCOUNT + ldrh r1, [r0] + movs r0, 0xFF + ands r0, r1 + strh r0, [r2] + mov r0, sp + ldrh r1, [r0] + ldr r0, _080C60B4 @ =gUnknown_020387EC + ldr r0, [r0] + movs r3, 0xC + ldrsh r2, [r0, r3] + movs r0, 0x50 + subs r0, r2 + cmp r1, r0 + ble _080C60BC + mov r0, sp + ldrh r1, [r0] + adds r0, r2, 0 + adds r0, 0x50 + cmp r1, r0 + bge _080C60BC + ldr r1, _080C60B8 @ =REG_BLDY + movs r0, 0 + b _080C60C0 + .align 2, 0 +_080C60B0: .4byte REG_VCOUNT +_080C60B4: .4byte gUnknown_020387EC +_080C60B8: .4byte REG_BLDY +_080C60BC: + ldr r1, _080C60C8 @ =REG_BLDY + movs r0, 0x10 +_080C60C0: + strh r0, [r1] + add sp, 0x4 + pop {r0} + bx r0 + .align 2, 0 +_080C60C8: .4byte REG_BLDY + thumb_func_end sub_80C6078 + + thumb_func_start sub_80C60CC +sub_80C60CC: @ 80C60CC + push {r4,lr} + adds r2, r0, 0 + ldrh r0, [r2, 0x2E] + ldrh r1, [r2, 0x20] + adds r0, r1 + strh r0, [r2, 0x20] + adds r0, 0x8 + lsls r0, 16 + movs r1, 0x80 + lsls r1, 17 + cmp r0, r1 + bls _080C611C + adds r0, r2, 0 + bl DestroySprite + ldr r4, _080C6124 @ =gUnknown_020387EC + ldr r1, [r4] + ldrh r0, [r1, 0xA] + adds r0, 0x1 + strh r0, [r1, 0xA] + lsls r0, 16 + lsrs r0, 16 + cmp r0, 0x8 + bne _080C611C + ldrh r0, [r1] + bl FreeSpriteTilesByTag + ldr r0, [r4] + ldrh r0, [r0, 0x2] + bl FreeSpritePaletteByTag + ldr r0, [r4] + ldr r0, [r0, 0x10] + ldr r2, _080C6128 @ =0x0000ffff + movs r1, 0 + bl BlendPalettes + ldr r0, _080C612C @ =sub_80C6078 + bl SetHBlankCallback +_080C611C: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080C6124: .4byte gUnknown_020387EC +_080C6128: .4byte 0x0000ffff +_080C612C: .4byte sub_80C6078 + thumb_func_end sub_80C60CC + + thumb_func_start sub_80C6130 +sub_80C6130: @ 80C6130 + push {r4,r5,lr} + adds r2, r0, 0 + movs r1, 0x36 + ldrsh r0, [r2, r1] + cmp r0, 0 + bne _080C61AA + ldr r1, _080C6184 @ =gUnknown_020387EC + ldr r0, [r1] + movs r3, 0xC + ldrsh r4, [r0, r3] + adds r5, r1, 0 + cmp r4, 0x1 + bne _080C61AA + ldrh r0, [r2, 0x2E] + ldrh r1, [r2, 0x20] + adds r0, r1 + strh r0, [r2, 0x20] + adds r0, 0xF + lsls r0, 16 + movs r1, 0x87 + lsls r1, 17 + cmp r0, r1 + bhi _080C616C + adds r3, r2, 0 + adds r3, 0x3E + ldrb r1, [r3] + movs r0, 0x5 + negs r0, r0 + ands r0, r1 + strb r0, [r3] +_080C616C: + movs r3, 0x30 + ldrsh r0, [r2, r3] + cmp r0, 0 + ble _080C6188 + movs r0, 0x20 + ldrsh r1, [r2, r0] + movs r3, 0x32 + ldrsh r0, [r2, r3] + cmp r1, r0 + blt _080C6196 + b _080C6194 + .align 2, 0 +_080C6184: .4byte gUnknown_020387EC +_080C6188: + movs r0, 0x20 + ldrsh r1, [r2, r0] + movs r3, 0x32 + ldrsh r0, [r2, r3] + cmp r1, r0 + bgt _080C6196 +_080C6194: + strh r4, [r2, 0x36] +_080C6196: + movs r1, 0x36 + ldrsh r0, [r2, r1] + cmp r0, 0 + beq _080C61AA + ldr r0, [r5] + ldrh r1, [r0, 0xA] + adds r1, 0x1 + strh r1, [r0, 0xA] + ldrh r0, [r2, 0x32] + strh r0, [r2, 0x20] +_080C61AA: + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end sub_80C6130 + + thumb_func_start sub_80C61B0 +sub_80C61B0: @ 80C61B0 + push {r4-r6,lr} + ldr r2, _080C61F0 @ =INTR_CHECK + ldrh r1, [r2] + movs r5, 0x2 + orrs r1, r5 + strh r1, [r2] + ldr r3, _080C61F4 @ =REG_DISPSTAT + ldrh r1, [r3] + movs r2, 0x10 + orrs r1, r2 + strh r1, [r3] + ldr r4, _080C61F8 @ =0x04000208 + ldrh r2, [r4] + movs r6, 0 + strh r6, [r4] + ldr r3, _080C61FC @ =0x04000200 + ldrh r1, [r3] + orrs r1, r5 + strh r1, [r3] + strh r2, [r4] + ldr r2, _080C6200 @ =gMain + ldrh r1, [r2, 0x1C] + orrs r1, r5 + ldrh r3, [r2, 0x1C] + orrs r1, r6 + strh r1, [r2, 0x1C] + bl SetHBlankCallback + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080C61F0: .4byte INTR_CHECK +_080C61F4: .4byte REG_DISPSTAT +_080C61F8: .4byte 0x04000208 +_080C61FC: .4byte 0x04000200 +_080C6200: .4byte gMain + thumb_func_end sub_80C61B0 + + thumb_func_start ClearGpuRegBits +ClearGpuRegBits: @ 80C6204 + push {r4,r5,lr} + ldr r3, _080C6248 @ =INTR_CHECK + ldrh r1, [r3] + ldr r2, _080C624C @ =0x0000fffd + adds r0, r2, 0 + ands r0, r1 + strh r0, [r3] + ldr r3, _080C6250 @ =REG_DISPSTAT + ldrh r1, [r3] + ldr r0, _080C6254 @ =0x0000ffef + ands r0, r1 + strh r0, [r3] + ldr r4, _080C6258 @ =0x04000208 + ldrh r3, [r4] + movs r0, 0 + strh r0, [r4] + ldr r5, _080C625C @ =0x04000200 + ldrh r1, [r5] + adds r0, r2, 0 + ands r0, r1 + strh r0, [r5] + strh r3, [r4] + ldr r0, _080C6260 @ =gMain + ldrh r1, [r0, 0x1C] + ands r2, r1 + ldrh r1, [r0, 0x1C] + strh r2, [r0, 0x1C] + movs r0, 0 + bl SetHBlankCallback + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080C6248: .4byte INTR_CHECK +_080C624C: .4byte 0x0000fffd +_080C6250: .4byte REG_DISPSTAT +_080C6254: .4byte 0x0000ffef +_080C6258: .4byte 0x04000208 +_080C625C: .4byte 0x04000200 +_080C6260: .4byte gMain + thumb_func_end ClearGpuRegBits + + .align 2, 0 @ Don't pad with nop. diff --git a/data/fldeff_decoration.s b/data/fldeff_decoration.s new file mode 100755 index 000000000..2081679cd --- /dev/null +++ b/data/fldeff_decoration.s @@ -0,0 +1,36 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + + .align 2 +gOamData_83D266C:: @ 83D266C + .2byte 0x8000 + .2byte 0x8000 + .2byte 0x0800 + + .align 2 +gSpriteAnim_83D2674:: @ 83D2674 + obj_image_anim_frame 0, 6 + obj_image_anim_frame 1, 6 + obj_image_anim_frame 2, 6 + obj_image_anim_end + + .align 2 +gSpriteAnimTable_83D2684:: @ 83D2684 + .4byte gSpriteAnim_83D2674 + + .align 2 +gSpriteImageTable_83D2688:: @ 83D2688 + obj_frame_tiles gSpriteImage_83D21EC, 0x100 + obj_frame_tiles gSpriteImage_83D22EC, 0x100 + obj_frame_tiles gSpriteImage_83D23EC, 0x100 + + .align 2 +gSpriteTemplate_83D26A0:: @ 83D26A0 + spr_template 0xFFFF, 4110, gOamData_83D266C, gSpriteAnimTable_83D2684, gSpriteImageTable_83D2688, gDummySpriteAffineAnimTable, SpriteCB_SandPillar_0 + +@ This uses one of the secret base palettes, so there is no "09.pal" file. + .align 2 +gFieldEffectObjectPaletteInfo9:: @ 83D26B8 + obj_pal gTilesetPalettes_SecretBase + 5 * 0x20, 0x100E diff --git a/data/fldeff_recordmixing.s b/data/fldeff_recordmixing.s new file mode 100755 index 000000000..ee9d6b8d6 --- /dev/null +++ b/data/fldeff_recordmixing.s @@ -0,0 +1,45 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + + .align 2 +gSpriteImage_83D26C0:: @ 83D26C0 + .incbin "graphics/unknown_sprites/83D2860/0.4bpp" + + .align 2 +gSpriteImage_83D2740:: @ 83D2740 + .incbin "graphics/unknown_sprites/83D2860/1.4bpp" + + .align 2 +gSpriteImage_83D27C0:: @ 83D27C0 + .incbin "graphics/unknown_sprites/83D2860/2.4bpp" + + .align 2 +Palette_3D2840:: @ 83D2840 + .incbin "graphics/unknown/unknown_3D2840.gbapal" + + .align 2 +gSpriteImageTable_83D2860:: @ 83D2860 + obj_frame_tiles gSpriteImage_83D26C0, 0x80 + obj_frame_tiles gSpriteImage_83D2740, 0x80 + obj_frame_tiles gSpriteImage_83D27C0, 0x80 + + .align 2 +gUnknown_083D2878:: @ 83D2878 + obj_pal Palette_3D2840, 4096 + + .align 2 +gSpriteAnim_83D2880:: @ 83D2880 + obj_image_anim_frame 0, 30 + obj_image_anim_frame 1, 30 + obj_image_anim_frame 2, 30 + obj_image_anim_jump 0 + + .align 2 +gSpriteAnimTable_83D2890:: @ 83D2890 + .4byte gSpriteAnim_83D2880 + + .align 2 +gSpriteTemplate_83D2894:: @ 83D2894 + spr_template 0xFFFF, 4096, gFieldOamData_32x8, gSpriteAnimTable_83D2890, gSpriteImageTable_83D2860, gDummySpriteAffineAnimTable, SpriteCallbackDummy diff --git a/data/fldeff_80C5CD4.s b/data/fldeff_secretpower.s index 4f0e83832..589ded675 100644..100755 --- a/data/fldeff_80C5CD4.s +++ b/data/fldeff_secretpower.s @@ -4,45 +4,6 @@ .section .rodata .align 2 -gUnknown_083D1898:: @ 83D1898 - obj_tiles gUnknownGfx_083D190C, 0x80, 0 - - .align 2 -gUnknown_083D18A0:: @ 83D18A0 - obj_pal gUnknownPal_083D18EC, 0x0000 - - .align 2 -gSpriteTemplate_83D18A8:: @ 83D18A8 - spr_template 0, 0, gOamData_83D18D8, gSpriteAnimTable_83D18E8, NULL, gDummySpriteAffineAnimTable, sub_80C60CC - - .align 2 -gSpriteTemplate_83D18C0:: @ 83D18C0 - spr_template 0, 0, gOamData_83D18D8, gSpriteAnimTable_83D18E8, NULL, gDummySpriteAffineAnimTable, sub_80C6130 - - .align 2 -gOamData_83D18D8:: @ 83D18D8 - .2byte 0x4000 - .2byte 0x4000 - .2byte 0x0000 - - .align 2 -gSpriteAnim_83D18E0:: @ 83D18E0 - obj_image_anim_frame 0, 5 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D18E8:: @ 83D18E8 - .4byte gSpriteAnim_83D18E0 - - .align 2 -gUnknownPal_083D18EC:: - .incbin "graphics/unknown/unknown_3D18EC.gbapal" - - .align 2 -gUnknownGfx_083D190C:: - .incbin "graphics/unknown/unknown_3D190C.4bpp" - - .align 2 gSpriteImage_83D198C:: @ 83D198C .incbin "graphics/unknown_sprites/83D259C/0.4bpp" @@ -245,76 +206,3 @@ gFieldEffectObjectPaletteInfo7:: @ 83D265C .align 2 gFieldEffectObjectPaletteInfo8:: @ 83D2664 obj_pal gFieldEffectObjectPalette8, 0x1008 - - .align 2 -gOamData_83D266C:: @ 83D266C - .2byte 0x8000 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gSpriteAnim_83D2674:: @ 83D2674 - obj_image_anim_frame 0, 6 - obj_image_anim_frame 1, 6 - obj_image_anim_frame 2, 6 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83D2684:: @ 83D2684 - .4byte gSpriteAnim_83D2674 - - .align 2 -gSpriteImageTable_83D2688:: @ 83D2688 - obj_frame_tiles gSpriteImage_83D21EC, 0x100 - obj_frame_tiles gSpriteImage_83D22EC, 0x100 - obj_frame_tiles gSpriteImage_83D23EC, 0x100 - - .align 2 -gSpriteTemplate_83D26A0:: @ 83D26A0 - spr_template 0xFFFF, 4110, gOamData_83D266C, gSpriteAnimTable_83D2684, gSpriteImageTable_83D2688, gDummySpriteAffineAnimTable, SpriteCB_SandPillar_0 - -@ This uses one of the secret base palettes, so there is no "09.pal" file. - .align 2 -gFieldEffectObjectPaletteInfo9:: @ 83D26B8 - obj_pal gTilesetPalettes_SecretBase + 5 * 0x20, 0x100E - - .align 2 -gSpriteImage_83D26C0:: @ 83D26C0 - .incbin "graphics/unknown_sprites/83D2860/0.4bpp" - - .align 2 -gSpriteImage_83D2740:: @ 83D2740 - .incbin "graphics/unknown_sprites/83D2860/1.4bpp" - - .align 2 -gSpriteImage_83D27C0:: @ 83D27C0 - .incbin "graphics/unknown_sprites/83D2860/2.4bpp" - - .align 2 -Palette_3D2840:: @ 83D2840 - .incbin "graphics/unknown/unknown_3D2840.gbapal" - - .align 2 -gSpriteImageTable_83D2860:: @ 83D2860 - obj_frame_tiles gSpriteImage_83D26C0, 0x80 - obj_frame_tiles gSpriteImage_83D2740, 0x80 - obj_frame_tiles gSpriteImage_83D27C0, 0x80 - - .align 2 -gUnknown_083D2878:: @ 83D2878 - obj_pal Palette_3D2840, 4096 - - .align 2 -gSpriteAnim_83D2880:: @ 83D2880 - obj_image_anim_frame 0, 30 - obj_image_anim_frame 1, 30 - obj_image_anim_frame 2, 30 - obj_image_anim_jump 0 - - .align 2 -gSpriteAnimTable_83D2890:: @ 83D2890 - .4byte gSpriteAnim_83D2880 - - .align 2 -gSpriteTemplate_83D2894:: @ 83D2894 - spr_template 0xFFFF, 4096, gFieldOamData_32x8, gSpriteAnimTable_83D2890, gSpriteImageTable_83D2860, gDummySpriteAffineAnimTable, SpriteCallbackDummy diff --git a/data/pss_effect.s b/data/pss_effect.s new file mode 100755 index 000000000..4f860213a --- /dev/null +++ b/data/pss_effect.s @@ -0,0 +1,43 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + + .align 2 +gUnknown_083D1898:: @ 83D1898 + obj_tiles gUnknownGfx_083D190C, 0x80, 0 + + .align 2 +gUnknown_083D18A0:: @ 83D18A0 + obj_pal gUnknownPal_083D18EC, 0x0000 + + .align 2 +gSpriteTemplate_83D18A8:: @ 83D18A8 + spr_template 0, 0, gOamData_83D18D8, gSpriteAnimTable_83D18E8, NULL, gDummySpriteAffineAnimTable, sub_80C60CC + + .align 2 +gSpriteTemplate_83D18C0:: @ 83D18C0 + spr_template 0, 0, gOamData_83D18D8, gSpriteAnimTable_83D18E8, NULL, gDummySpriteAffineAnimTable, sub_80C6130 + + .align 2 +gOamData_83D18D8:: @ 83D18D8 + .2byte 0x4000 + .2byte 0x4000 + .2byte 0x0000 + + .align 2 +gSpriteAnim_83D18E0:: @ 83D18E0 + obj_image_anim_frame 0, 5 + obj_image_anim_end + + .align 2 +gSpriteAnimTable_83D18E8:: @ 83D18E8 + .4byte gSpriteAnim_83D18E0 + + .align 2 +gUnknownPal_083D18EC:: + .incbin "graphics/unknown/unknown_3D18EC.gbapal" + + .align 2 +gUnknownGfx_083D190C:: + .incbin "graphics/unknown/unknown_3D190C.4bpp" diff --git a/ld_script.txt b/ld_script.txt index 88a1dec69..4b090db69 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -158,7 +158,13 @@ SECTIONS { src/script_pokemon_util_80C4BF0.o(.text); src/field/field_poison.o(.text); src/pokemon/pokemon_size_record.o(.text); - asm/fldeff_80C5CD4.o(.text); + asm/pss_effect.o(.text); + asm/fldeff_secretpower.o(.text); + asm/fldeff_pc.o(.text); + asm/fldeff_decoration.o(.text); + asm/fldeff_poison.o(.text); + asm/fldeff_berrytree.o(.text); + asm/fldeff_recordmixing.o(.text); src/field/field_special_scene.o(.text); src/field/rotating_gate.o(.text); src/field/safari_zone.o(.text); @@ -401,7 +407,10 @@ SECTIONS { src/field/tv.o(.rodata); data/contest_link_80C2020.o(.rodata); src/pokemon/pokemon_size_record.o(.rodata); - data/fldeff_80C5CD4.o(.rodata); + data/pss_effect.o(.rodata); + data/fldeff_secretpower.o(.rodata); + data/fldeff_decoration.o(.rodata); + data/fldeff_recordmixing.o(.rodata); src/field/field_special_scene.o(.rodata); src/field/rotating_gate.o(.rodata); src/field/item_use.o(.rodata); |