summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/fldeff_80C5CD4.s2766
-rwxr-xr-xasm/fldeff_berrytree.s164
-rwxr-xr-xasm/fldeff_decoration.s907
-rwxr-xr-xasm/fldeff_pc.s190
-rwxr-xr-xasm/fldeff_poison.s99
-rwxr-xr-xasm/fldeff_recordmixing.s94
-rwxr-xr-xasm/fldeff_secretpower.s640
-rwxr-xr-xasm/pss_effect.s726
-rwxr-xr-xdata/fldeff_decoration.s36
-rwxr-xr-xdata/fldeff_recordmixing.s45
-rwxr-xr-x[-rw-r--r--]data/fldeff_secretpower.s (renamed from data/fldeff_80C5CD4.s)112
-rwxr-xr-xdata/pss_effect.s43
-rw-r--r--ld_script.txt13
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);