summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/decoration_inventory.s404
-rw-r--r--asm/field_effect.s7738
-rw-r--r--data/decoration_inventory.s16
-rw-r--r--data/field_effect.s433
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082CF564/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082CF564/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082D05D8/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082D05D8/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082D05FC/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082D05FC/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E55C8/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E55C8/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E55EC/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E55EC/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E5610/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E5610/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E5634/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E5634/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E5658/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E5658/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E567C/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E567C/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E56A0/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E56A0/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E56C4/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E56C4/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E56E8/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E56E8/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E570C/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E570C/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E5730/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E5730/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E5754/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E5754/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E5778/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E5778/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E579C/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082E579C/map.binbin4 -> 4 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082EDF30/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082EDF30/map.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082FF894/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_082FF894/map.binbin724 -> 724 bytes
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_08302970/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_08302970/map.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_083041B4/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnknownMap_083041B4/map.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnreferencedMap/border.bin0
-rw-r--r--[-rwxr-xr-x]data/maps/UnreferencedMap/map.bin0
-rw-r--r--include/asm.inc.h8
-rw-r--r--[-rwxr-xr-x]include/decoration.h0
-rw-r--r--include/decoration_inventory.h8
-rw-r--r--include/field_effect.h209
-rw-r--r--include/field_weather.h2
-rwxr-xr-x[-rw-r--r--]include/gba/defines.h0
-rw-r--r--include/gba/types.h2
-rwxr-xr-x[-rw-r--r--]include/global.h25
-rw-r--r--include/record_mixing.h4
-rw-r--r--include/rom4.h4
-rw-r--r--include/sprite.h2
-rwxr-xr-x[-rw-r--r--]ld_script.txt7
-rwxr-xr-x[-rw-r--r--]src/daycare.c86
-rw-r--r--[-rwxr-xr-x]src/decoration.c0
-rw-r--r--src/decoration_inventory.c169
-rwxr-xr-x[-rw-r--r--]src/field_effect.c3200
-rw-r--r--src/palette.c8
-rw-r--r--src/record_mixing.c101
66 files changed, 3665 insertions, 8761 deletions
diff --git a/asm/decoration_inventory.s b/asm/decoration_inventory.s
deleted file mode 100644
index 953d770ae..000000000
--- a/asm/decoration_inventory.s
+++ /dev/null
@@ -1,404 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start ClearDecorationInventory
-ClearDecorationInventory: @ 8133F4C
- push {r4,r5,lr}
- lsls r0, 24
- movs r3, 0
- ldr r1, _08133F7C @ =gDecorationInventories
- lsrs r2, r0, 21
- adds r0, r2, r1
- ldrb r0, [r0, 0x4]
- cmp r3, r0
- bcs _08133F76
- adds r5, r1, 0
- movs r4, 0
-_08133F62:
- adds r0, r2, r5
- ldr r1, [r0]
- adds r1, r3
- strb r4, [r1]
- adds r1, r3, 0x1
- lsls r1, 24
- lsrs r3, r1, 24
- ldrb r0, [r0, 0x4]
- cmp r3, r0
- bcc _08133F62
-_08133F76:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08133F7C: .4byte gDecorationInventories
- thumb_func_end ClearDecorationInventory
-
- thumb_func_start ClearDecorationInventories
-ClearDecorationInventories: @ 8133F80
- push {r4,lr}
- movs r4, 0
-_08133F84:
- adds r0, r4, 0
- bl ClearDecorationInventory
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _08133F84
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ClearDecorationInventories
-
- thumb_func_start sub_8133F9C
-sub_8133F9C: @ 8133F9C
- push {r4,lr}
- lsls r0, 24
- movs r2, 0
- ldr r1, _08133FC8 @ =gDecorationInventories
- lsrs r0, 21
- adds r0, r1
- movs r1, 0x4
- ldrsb r1, [r0, r1]
- cmp r2, r1
- bge _08133FD8
- adds r4, r0, 0
- adds r3, r1, 0
-_08133FB4:
- lsls r0, r2, 24
- asrs r1, r0, 24
- ldr r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08133FCC
- adds r0, r1, 0
- b _08133FDC
- .align 2, 0
-_08133FC8: .4byte gDecorationInventories
-_08133FCC:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- asrs r0, 24
- cmp r0, r3
- blt _08133FB4
-_08133FD8:
- movs r0, 0x1
- negs r0, r0
-_08133FDC:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8133F9C
-
- thumb_func_start sub_8133FE4
-sub_8133FE4: @ 8133FE4
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r1, _08134010 @ =gDecorations
- lsls r0, r3, 5
- adds r0, r1
- ldrb r0, [r0, 0x13]
- movs r2, 0
- ldr r1, _08134014 @ =gDecorationInventories
- lsls r0, 3
- adds r0, r1
- ldrb r1, [r0, 0x4]
- cmp r2, r1
- bcs _08134022
- ldr r4, [r0]
-_08134002:
- adds r0, r4, r2
- ldrb r0, [r0]
- cmp r0, r3
- bne _08134018
- movs r0, 0x1
- b _08134024
- .align 2, 0
-_08134010: .4byte gDecorations
-_08134014: .4byte gDecorationInventories
-_08134018:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, r1
- bcc _08134002
-_08134022:
- movs r0, 0
-_08134024:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8133FE4
-
- thumb_func_start IsThereStorageSpaceForDecoration
-IsThereStorageSpaceForDecoration: @ 813402C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- cmp r4, 0
- beq _0813406C
- ldr r1, _08134064 @ =gDecorations
- lsls r0, r4, 5
- adds r0, r1
- ldrb r5, [r0, 0x13]
- adds r0, r5, 0
- bl sub_8133F9C
- lsls r0, 24
- asrs r2, r0, 24
- movs r0, 0x1
- negs r0, r0
- cmp r2, r0
- beq _0813406C
- ldr r0, _08134068 @ =gDecorationInventories
- lsls r1, r5, 3
- adds r1, r0
- ldr r0, [r1]
- adds r0, r2
- strb r4, [r0]
- movs r0, 0x1
- b _0813406E
- .align 2, 0
-_08134064: .4byte gDecorations
-_08134068: .4byte gDecorationInventories
-_0813406C:
- movs r0, 0
-_0813406E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end IsThereStorageSpaceForDecoration
-
- thumb_func_start sub_8134074
-sub_8134074: @ 8134074
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _081340A0
- ldr r1, _0813409C @ =gDecorations
- lsls r0, 5
- adds r0, r1
- ldrb r0, [r0, 0x13]
- bl sub_8133F9C
- lsls r0, 24
- asrs r0, 24
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- beq _081340A0
- movs r0, 0x1
- b _081340A2
- .align 2, 0
-_0813409C: .4byte gDecorations
-_081340A0:
- movs r0, 0
-_081340A2:
- pop {r1}
- bx r1
- thumb_func_end sub_8134074
-
- thumb_func_start sub_81340A8
-sub_81340A8: @ 81340A8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r3, 0
- cmp r5, 0
- bne _081340C4
- b _081340F2
-_081340B6:
- movs r0, 0
- strb r0, [r1]
- adds r0, r6, 0
- bl sub_8134104
- movs r0, 0x1
- b _081340F4
-_081340C4:
- ldr r2, _081340FC @ =gDecorationInventories
- ldr r1, _08134100 @ =gDecorations
- lsls r0, r5, 5
- adds r0, r1
- ldrb r4, [r0, 0x13]
- lsls r0, r4, 3
- adds r0, r2
- ldrb r1, [r0, 0x4]
- cmp r3, r1
- bcs _081340F2
- adds r6, r4, 0
- adds r4, r0, 0
- adds r2, r1, 0
-_081340DE:
- ldr r0, [r4]
- adds r1, r0, r3
- ldrb r0, [r1]
- cmp r0, r5
- beq _081340B6
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r2
- bcc _081340DE
-_081340F2:
- movs r0, 0
-_081340F4:
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_081340FC: .4byte gDecorationInventories
-_08134100: .4byte gDecorations
- thumb_func_end sub_81340A8
-
- thumb_func_start sub_8134104
-sub_8134104: @ 8134104
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- movs r6, 0
- ldr r2, _08134190 @ =gDecorationInventories
- lsrs r1, r0, 21
- adds r0, r1, r2
- ldrb r0, [r0, 0x4]
- cmp r6, r0
- bcs _08134180
- adds r7, r1, 0
- mov r8, r0
- str r0, [sp]
-_08134126:
- adds r1, r6, 0x1
- lsls r0, r1, 24
- lsrs r3, r0, 24
- adds r2, r7, 0
- mov r12, r1
- cmp r3, r8
- bcs _08134174
- ldr r1, _08134190 @ =gDecorationInventories
- mov r10, r1
- adds r0, r1, 0
- mov r9, r0
-_0813413C:
- mov r1, r10
- adds r5, r2, r1
- ldr r1, [r5]
- adds r0, r1, r3
- ldrb r4, [r0]
- adds r2, r4, 0
- cmp r2, 0
- beq _08134162
- adds r0, r1, r6
- ldrb r1, [r0]
- cmp r1, 0
- beq _08134158
- cmp r1, r2
- bls _08134162
-_08134158:
- ldrb r1, [r0]
- strb r4, [r0]
- ldr r0, [r5]
- adds r0, r3
- strb r1, [r0]
-_08134162:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- adds r2, r7, 0
- mov r1, r9
- adds r0, r2, r1
- ldrb r0, [r0, 0x4]
- cmp r3, r0
- bcc _0813413C
-_08134174:
- mov r1, r12
- lsls r0, r1, 24
- lsrs r6, r0, 24
- ldr r0, [sp]
- cmp r6, r0
- bcc _08134126
-_08134180:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08134190: .4byte gDecorationInventories
- thumb_func_end sub_8134104
-
- thumb_func_start sub_8134194
-sub_8134194: @ 8134194
- push {r4,r5,lr}
- lsls r0, 24
- movs r4, 0
- movs r3, 0
- ldr r2, _081341D0 @ =gDecorationInventories
- lsrs r1, r0, 21
- adds r0, r1, r2
- ldrb r0, [r0, 0x4]
- cmp r4, r0
- bcs _081341C8
- adds r5, r2, 0
-_081341AA:
- adds r2, r1, r5
- ldr r0, [r2]
- adds r0, r3
- ldrb r0, [r0]
- cmp r0, 0
- beq _081341BC
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_081341BC:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- ldrb r2, [r2, 0x4]
- cmp r3, r2
- bcc _081341AA
-_081341C8:
- adds r0, r4, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_081341D0: .4byte gDecorationInventories
- thumb_func_end sub_8134194
-
- thumb_func_start sub_81341D4
-sub_81341D4: @ 81341D4
- push {r4,r5,lr}
- movs r5, 0
- movs r4, 0
-_081341DA:
- adds r0, r4, 0
- bl sub_8134194
- adds r0, r5, r0
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _081341DA
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_81341D4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_effect.s b/asm/field_effect.s
deleted file mode 100644
index 2dfa491dc..000000000
--- a/asm/field_effect.s
+++ /dev/null
@@ -1,7738 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start CreateTrainerSprite_BirchSpeech
-CreateTrainerSprite_BirchSpeech: @ 80859BC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x18
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- mov r9, r3
- ldr r7, [sp, 0x34]
- lsls r4, 24
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsrs r4, 21
- ldr r3, _08085A44 @ =gTrainerFrontPicPaletteTable
- mov r8, r3
- add r8, r4
- mov r0, r8
- adds r1, r7, 0
- bl LoadCompressedObjectPaletteOverrideBuffer
- ldr r0, _08085A48 @ =gTrainerFrontPicTable
- adds r4, r0
- adds r0, r4, 0
- adds r1, r7, 0
- bl LoadCompressedObjectPicOverrideBuffer
- mov r1, sp
- ldrh r0, [r4, 0x6]
- movs r2, 0
- strh r0, [r1]
- mov r3, r8
- ldrh r0, [r3, 0x4]
- strh r0, [r1, 0x2]
- ldr r0, _08085A4C @ =gOamData_839F0F4
- str r0, [sp, 0x4]
- ldr r0, _08085A50 @ =gDummySpriteAnimTable
- str r0, [sp, 0x8]
- str r2, [sp, 0xC]
- ldr r0, _08085A54 @ =gDummySpriteAffineAnimTable
- str r0, [sp, 0x10]
- ldr r0, _08085A58 @ =SpriteCallbackDummy
- str r0, [sp, 0x14]
- lsls r5, 16
- asrs r5, 16
- lsls r6, 16
- asrs r6, 16
- mov r0, sp
- adds r1, r5, 0
- adds r2, r6, 0
- mov r3, r9
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x18
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08085A44: .4byte gTrainerFrontPicPaletteTable
-_08085A48: .4byte gTrainerFrontPicTable
-_08085A4C: .4byte gOamData_839F0F4
-_08085A50: .4byte gDummySpriteAnimTable
-_08085A54: .4byte gDummySpriteAffineAnimTable
-_08085A58: .4byte SpriteCallbackDummy
- thumb_func_end CreateTrainerSprite_BirchSpeech
-
- thumb_func_start LoadTrainerGfx_TrainerCard
-LoadTrainerGfx_TrainerCard: @ 8085A5C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r1, r2, 0
- lsls r4, 24
- lsls r5, 16
- lsrs r5, 16
- ldr r0, _08085A8C @ =gTrainerFrontPicTable
- lsrs r4, 21
- adds r0, r4, r0
- ldr r0, [r0]
- bl LZDecompressVram
- ldr r0, _08085A90 @ =gTrainerFrontPicPaletteTable
- adds r4, r0
- ldr r0, [r4]
- adds r1, r5, 0
- movs r2, 0x20
- bl LoadCompressedPalette
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08085A8C: .4byte gTrainerFrontPicTable
-_08085A90: .4byte gTrainerFrontPicPaletteTable
- thumb_func_end LoadTrainerGfx_TrainerCard
-
- thumb_func_start CreateBirchSprite
-CreateBirchSprite: @ 8085A94
- 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, 24
- lsrs r6, 24
- ldr r0, _08085ACC @ =gUnknown_0839F114
- bl LoadSpritePalette
- ldr r0, _08085AD0 @ =gSpriteTemplate_839F128
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08085ACC: .4byte gUnknown_0839F114
-_08085AD0: .4byte gSpriteTemplate_839F128
- thumb_func_end CreateBirchSprite
-
- thumb_func_start CreateMonSprite_PicBox
-CreateMonSprite_PicBox: @ 8085AD4
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x8
- adds r4, r0, 0
- adds r6, r1, 0
- mov r8, r2
- mov r10, r3
- lsls r4, 16
- lsrs r4, 16
- lsls r6, 16
- lsrs r6, 16
- mov r0, r8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- mov r0, r10
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- lsls r0, r4, 3
- mov r9, r0
- ldr r0, _08085B74 @ =gMonFrontPicTable
- add r0, r9
- ldr r1, _08085B78 @ =gMonFrontPicCoords
- lsls r2, r4, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- ldr r3, _08085B7C @ =gUnknown_081FAF4C
- ldr r3, [r3, 0xC]
- str r3, [sp]
- str r4, [sp, 0x4]
- bl DecompressPicFromTable_2
- ldr r5, _08085B80 @ =gMonPaletteTable
- add r9, r5
- mov r0, r9
- bl LoadCompressedObjectPalette
- adds r0, r4, 0
- movs r1, 0x3
- bl GetMonSpriteTemplate_803C56C
- ldr r4, _08085B84 @ =gUnknown_02024E8C
- ldrh r0, [r5, 0x4]
- strh r0, [r4, 0x2]
- ldrh r0, [r5, 0x4]
- bl IndexOfSpritePaletteTag
- adds r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- bl sub_807DE38
- lsls r6, 16
- asrs r6, 16
- mov r0, r8
- lsls r0, 16
- asrs r0, 16
- mov r8, r0
- adds r0, r4, 0
- adds r1, r6, 0
- mov r2, r8
- mov r3, r10
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08085B74: .4byte gMonFrontPicTable
-_08085B78: .4byte gMonFrontPicCoords
-_08085B7C: .4byte gUnknown_081FAF4C
-_08085B80: .4byte gMonPaletteTable
-_08085B84: .4byte gUnknown_02024E8C
- thumb_func_end CreateMonSprite_PicBox
-
- thumb_func_start CreateMonSprite_FieldMove
-CreateMonSprite_FieldMove: @ 8085B88
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0xC
- adds r5, r0, 0
- mov r10, r1
- adds r4, r2, 0
- adds r6, r3, 0
- ldr r0, [sp, 0x28]
- mov r8, r0
- ldr r0, [sp, 0x2C]
- mov r9, r0
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- mov r0, r8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r0, r5, 3
- ldr r1, _08085C34 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _08085C38 @ =gMonFrontPicCoords
- lsls r2, r5, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- ldr r3, _08085C3C @ =gUnknown_081FAF4C
- ldr r3, [r3, 0xC]
- str r3, [sp]
- str r5, [sp, 0x4]
- str r4, [sp, 0x8]
- bl HandleLoadSpecialPokePic
- adds r0, r5, 0
- mov r1, r10
- adds r2, r4, 0
- bl sub_80409C8
- adds r4, r0, 0
- bl LoadCompressedObjectPalette
- adds r0, r5, 0
- movs r1, 0x3
- bl GetMonSpriteTemplate_803C56C
- ldr r5, _08085C40 @ =gUnknown_02024E8C
- ldrh r0, [r4, 0x4]
- strh r0, [r5, 0x2]
- ldrh r0, [r4, 0x4]
- bl IndexOfSpritePaletteTag
- adds r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- bl sub_807DE38
- lsls r6, 16
- asrs r6, 16
- mov r0, r8
- lsls r0, 16
- asrs r0, 16
- mov r8, r0
- adds r0, r5, 0
- adds r1, r6, 0
- mov r2, r8
- mov r3, r9
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08085C34: .4byte gMonFrontPicTable
-_08085C38: .4byte gMonFrontPicCoords
-_08085C3C: .4byte gUnknown_081FAF4C
-_08085C40: .4byte gUnknown_02024E8C
- thumb_func_end CreateMonSprite_FieldMove
-
- thumb_func_start FreeResourcesAndDestroySprite
-FreeResourcesAndDestroySprite: @ 8085C44
- push {r4,lr}
- adds r4, r0, 0
- bl sub_807DE68
- ldrb r0, [r4, 0x5]
- lsrs r0, 4
- bl GetSpritePaletteTagByPaletteNum
- lsls r0, 16
- lsrs r0, 16
- bl FreeSpritePaletteByTag
- ldrb r0, [r4, 0x1]
- lsls r0, 30
- cmp r0, 0
- beq _08085C6E
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
-_08085C6E:
- adds r0, r4, 0
- bl DestroySprite
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end FreeResourcesAndDestroySprite
-
- thumb_func_start MultiplyInvertedPaletteRGBComponents
-MultiplyInvertedPaletteRGBComponents: @ 8085C7C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 16
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- ldr r4, _08085D00 @ =gPlttBufferUnfaded
- lsrs r0, 15
- adds r4, r0, r4
- ldrh r4, [r4]
- movs r5, 0x1F
- mov r9, r5
- mov r8, r4
- mov r6, r8
- ands r6, r5
- mov r8, r6
- movs r6, 0xF8
- lsls r6, 2
- ands r6, r4
- lsrs r6, 5
- movs r5, 0xF8
- lsls r5, 7
- ands r4, r5
- lsrs r4, 10
- mov r7, r9
- mov r5, r8
- subs r7, r5
- mov r12, r7
- mov r7, r12
- muls r7, r1
- adds r1, r7, 0
- asrs r1, 4
- add r8, r1
- mov r5, r9
- subs r1, r5, r6
- muls r1, r2
- asrs r1, 4
- adds r6, r1
- subs r5, r4
- mov r9, r5
- mov r1, r9
- muls r1, r3
- asrs r1, 4
- adds r4, r1
- mov r7, r8
- lsls r7, 16
- lsls r6, 21
- orrs r6, r7
- lsls r4, 26
- orrs r4, r6
- lsrs r4, 16
- ldr r1, _08085D04 @ =gPlttBufferFaded
- adds r0, r1
- strh r4, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08085D00: .4byte gPlttBufferUnfaded
-_08085D04: .4byte gPlttBufferFaded
- thumb_func_end MultiplyInvertedPaletteRGBComponents
-
- thumb_func_start MultiplyPaletteRGBComponents
-MultiplyPaletteRGBComponents: @ 8085D08
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- lsls r0, 16
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- ldr r4, _08085D78 @ =gPlttBufferUnfaded
- lsrs r0, 15
- adds r4, r0, r4
- ldrh r4, [r4]
- movs r5, 0x1F
- mov r8, r5
- mov r6, r8
- ands r6, r4
- mov r8, r6
- movs r5, 0xF8
- lsls r5, 2
- ands r5, r4
- lsrs r5, 5
- movs r6, 0xF8
- lsls r6, 7
- ands r4, r6
- lsrs r4, 10
- mov r6, r8
- muls r6, r1
- adds r1, r6, 0
- asrs r1, 4
- mov r6, r8
- subs r6, r1
- adds r1, r5, 0
- muls r1, r2
- asrs r1, 4
- subs r5, r1
- adds r1, r4, 0
- muls r1, r3
- asrs r1, 4
- subs r4, r1
- lsls r6, 16
- lsls r5, 21
- orrs r5, r6
- lsls r4, 26
- orrs r4, r5
- lsrs r4, 16
- ldr r1, _08085D7C @ =gPlttBufferFaded
- adds r0, r1
- strh r4, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08085D78: .4byte gPlttBufferUnfaded
-_08085D7C: .4byte gPlttBufferFaded
- thumb_func_end MultiplyPaletteRGBComponents
-
- thumb_func_start FldEff_PokecenterHeal
-FldEff_PokecenterHeal: @ 8085D80
- push {r4,lr}
- bl CalculatePlayerPartyCount
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08085DBC @ =Task_PokecenterHeal
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08085DC0 @ =gTasks
- adds r1, r0
- strh r4, [r1, 0xA]
- movs r0, 0x5D
- strh r0, [r1, 0xC]
- movs r0, 0x24
- strh r0, [r1, 0xE]
- movs r0, 0x7C
- strh r0, [r1, 0x10]
- movs r0, 0x18
- strh r0, [r1, 0x12]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08085DBC: .4byte Task_PokecenterHeal
-_08085DC0: .4byte gTasks
- thumb_func_end FldEff_PokecenterHeal
-
- thumb_func_start Task_PokecenterHeal
-Task_PokecenterHeal: @ 8085DC4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08085DEC @ =gTasks
- adds r1, r0
- ldr r2, _08085DF0 @ =gUnknown_0839F268
- movs r3, 0x8
- ldrsh r0, [r1, r3]
- lsls r0, 2
- adds r0, r2
- ldr r2, [r0]
- adds r0, r1, 0
- bl _call_via_r2
- pop {r0}
- bx r0
- .align 2, 0
-_08085DEC: .4byte gTasks
-_08085DF0: .4byte gUnknown_0839F268
- thumb_func_end Task_PokecenterHeal
-
- thumb_func_start PokecenterHealEffect_0
-PokecenterHealEffect_0: @ 8085DF4
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- movs r2, 0xC
- ldrsh r1, [r4, r2]
- movs r3, 0xE
- ldrsh r2, [r4, r3]
- movs r3, 0x1
- bl CreatePokeballGlowSprite
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x14]
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- movs r2, 0x12
- ldrsh r1, [r4, r2]
- bl PokecenterHealEffectHelper
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x16]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end PokecenterHealEffect_0
-
- thumb_func_start PokecenterHealEffect_1
-PokecenterHealEffect_1: @ 8085E30
- push {r4,lr}
- adds r2, r0, 0
- ldr r3, _08085E68 @ =gSprites
- movs r1, 0x14
- ldrsh r0, [r2, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- movs r4, 0x2E
- ldrsh r0, [r1, r4]
- cmp r0, 0x1
- ble _08085E62
- movs r0, 0x16
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r1, [r0, 0x2E]
- adds r1, 0x1
- strh r1, [r0, 0x2E]
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
-_08085E62:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08085E68: .4byte gSprites
- thumb_func_end PokecenterHealEffect_1
-
- thumb_func_start PokecenterHealEffect_2
-PokecenterHealEffect_2: @ 8085E6C
- push {lr}
- adds r3, r0, 0
- ldr r2, _08085E90 @ =gSprites
- movs r0, 0x14
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2E
- ldrsh r0, [r0, r1]
- cmp r0, 0x4
- ble _08085E8C
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_08085E8C:
- pop {r0}
- bx r0
- .align 2, 0
-_08085E90: .4byte gSprites
- thumb_func_end PokecenterHealEffect_2
-
- thumb_func_start PokecenterHealEffect_3
-PokecenterHealEffect_3: @ 8085E94
- push {lr}
- ldr r2, _08085ECC @ =gSprites
- movs r3, 0x14
- ldrsh r1, [r0, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- movs r2, 0x2E
- ldrsh r0, [r1, r2]
- cmp r0, 0x6
- ble _08085EC6
- adds r0, r1, 0
- bl DestroySprite
- movs r0, 0x19
- bl FieldEffectActiveListRemove
- ldr r0, _08085ED0 @ =Task_PokecenterHeal
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08085EC6:
- pop {r0}
- bx r0
- .align 2, 0
-_08085ECC: .4byte gSprites
-_08085ED0: .4byte Task_PokecenterHeal
- thumb_func_end PokecenterHealEffect_3
-
- thumb_func_start FldEff_HallOfFameRecord
-FldEff_HallOfFameRecord: @ 8085ED4
- push {r4,lr}
- bl CalculatePlayerPartyCount
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08085F08 @ =Task_HallOfFameRecord
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08085F0C @ =gTasks
- adds r1, r0
- strh r4, [r1, 0xA]
- movs r0, 0x75
- strh r0, [r1, 0xC]
- movs r0, 0x34
- strh r0, [r1, 0xE]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08085F08: .4byte Task_HallOfFameRecord
-_08085F0C: .4byte gTasks
- thumb_func_end FldEff_HallOfFameRecord
-
- thumb_func_start Task_HallOfFameRecord
-Task_HallOfFameRecord: @ 8085F10
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08085F38 @ =gTasks
- adds r1, r0
- ldr r2, _08085F3C @ =gUnknown_0839F278
- movs r3, 0x8
- ldrsh r0, [r1, r3]
- lsls r0, 2
- adds r0, r2
- ldr r2, [r0]
- adds r0, r1, 0
- bl _call_via_r2
- pop {r0}
- bx r0
- .align 2, 0
-_08085F38: .4byte gTasks
-_08085F3C: .4byte gUnknown_0839F278
- thumb_func_end Task_HallOfFameRecord
-
- thumb_func_start HallOfFameRecordEffect_0
-HallOfFameRecordEffect_0: @ 8085F40
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- movs r2, 0xC
- ldrsh r1, [r4, r2]
- movs r3, 0xE
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreatePokeballGlowSprite
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x14]
- ldr r0, _08085FB0 @ =Task_HallOfFameRecord
- bl FindTaskIdByFunc
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0x78
- movs r2, 0x18
- movs r3, 0
- bl HallOfFameRecordEffectHelper
- adds r0, r4, 0
- movs r1, 0x28
- movs r2, 0x8
- movs r3, 0x1
- bl HallOfFameRecordEffectHelper
- adds r0, r4, 0
- movs r1, 0x48
- movs r2, 0x8
- movs r3, 0x1
- bl HallOfFameRecordEffectHelper
- adds r0, r4, 0
- movs r1, 0xA8
- movs r2, 0x8
- movs r3, 0x1
- bl HallOfFameRecordEffectHelper
- adds r0, r4, 0
- movs r1, 0xC8
- movs r2, 0x8
- movs r3, 0x1
- bl HallOfFameRecordEffectHelper
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08085FB0: .4byte Task_HallOfFameRecord
- thumb_func_end HallOfFameRecordEffect_0
-
- thumb_func_start HallOfFameRecordEffect_1
-HallOfFameRecordEffect_1: @ 8085FB4
- push {lr}
- adds r3, r0, 0
- ldr r2, _08085FE0 @ =gSprites
- movs r0, 0x14
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2E
- ldrsh r0, [r0, r1]
- cmp r0, 0x1
- ble _08085FDA
- ldrh r0, [r3, 0x26]
- adds r0, 0x1
- strh r0, [r3, 0x26]
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_08085FDA:
- pop {r0}
- bx r0
- .align 2, 0
-_08085FE0: .4byte gSprites
- thumb_func_end HallOfFameRecordEffect_1
-
- thumb_func_start HallOfFameRecordEffect_2
-HallOfFameRecordEffect_2: @ 8085FE4
- push {lr}
- adds r3, r0, 0
- ldr r2, _08086008 @ =gSprites
- movs r0, 0x14
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2E
- ldrsh r0, [r0, r1]
- cmp r0, 0x4
- ble _08086004
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_08086004:
- pop {r0}
- bx r0
- .align 2, 0
-_08086008: .4byte gSprites
- thumb_func_end HallOfFameRecordEffect_2
-
- thumb_func_start HallOfFameRecordEffect_3
-HallOfFameRecordEffect_3: @ 808600C
- push {lr}
- ldr r2, _08086044 @ =gSprites
- movs r3, 0x14
- ldrsh r1, [r0, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- movs r2, 0x2E
- ldrsh r0, [r1, r2]
- cmp r0, 0x6
- ble _0808603E
- adds r0, r1, 0
- bl DestroySprite
- movs r0, 0x3E
- bl FieldEffectActiveListRemove
- ldr r0, _08086048 @ =Task_HallOfFameRecord
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0808603E:
- pop {r0}
- bx r0
- .align 2, 0
-_08086044: .4byte gSprites
-_08086048: .4byte Task_HallOfFameRecord
- thumb_func_end HallOfFameRecordEffect_3
-
- thumb_func_start CreatePokeballGlowSprite
-CreatePokeballGlowSprite: @ 808604C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- mov r8, r0
- adds r4, r1, 0
- adds r5, r2, 0
- adds r6, r3, 0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- ldr r0, _08086098 @ =SpriteCB_PokeballGlowEffect
- bl CreateInvisibleSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r2, _0808609C @ =gSprites
- adds r1, r2
- strh r4, [r1, 0x24]
- strh r5, [r1, 0x26]
- strh r6, [r1, 0x38]
- mov r2, r8
- strh r2, [r1, 0x3A]
- strh r0, [r1, 0x3C]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08086098: .4byte SpriteCB_PokeballGlowEffect
-_0808609C: .4byte gSprites
- thumb_func_end CreatePokeballGlowSprite
-
- thumb_func_start SpriteCB_PokeballGlowEffect
-SpriteCB_PokeballGlowEffect: @ 80860A0
- push {lr}
- ldr r2, _080860B8 @ =gUnknown_0839F288
- movs r3, 0x2E
- ldrsh r1, [r0, r3]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_080860B8: .4byte gUnknown_0839F288
- thumb_func_end SpriteCB_PokeballGlowEffect
-
- thumb_func_start PokeballGlowEffect_0
-PokeballGlowEffect_0: @ 80860BC
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x30]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080860D4
- subs r0, r1, 0x1
- strh r0, [r4, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _08086130
-_080860D4:
- movs r0, 0x19
- strh r0, [r4, 0x30]
- ldr r0, _08086148 @ =gSpriteTemplate_839F208
- ldr r1, _0808614C @ =gUnknown_0839F2A8
- movs r2, 0x32
- ldrsh r3, [r4, r2]
- lsls r3, 2
- adds r3, r1
- ldrh r1, [r4, 0x24]
- ldrh r2, [r3]
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- ldrh r2, [r4, 0x26]
- ldrh r3, [r3, 0x2]
- adds r2, r3
- lsls r2, 16
- asrs r2, 16
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08086150 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r2, 0x8
- orrs r0, r2
- strb r0, [r1, 0x5]
- ldrh r0, [r4, 0x3C]
- strh r0, [r1, 0x2E]
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x3A]
- subs r0, 0x1
- strh r0, [r4, 0x3A]
- movs r0, 0x17
- bl PlaySE
-_08086130:
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08086142
- movs r0, 0x20
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_08086142:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08086148: .4byte gSpriteTemplate_839F208
-_0808614C: .4byte gUnknown_0839F2A8
-_08086150: .4byte gSprites
- thumb_func_end PokeballGlowEffect_0
-
- thumb_func_start PokeballGlowEffect_1
-PokeballGlowEffect_1: @ 8086154
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- subs r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- asrs r2, r0, 16
- cmp r2, 0
- bne _08086184
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
- movs r0, 0x8
- strh r0, [r1, 0x30]
- strh r2, [r1, 0x32]
- strh r2, [r1, 0x34]
- movs r2, 0x38
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _08086184
- movs r0, 0xB8
- lsls r0, 1
- bl PlayFanfare
-_08086184:
- pop {r0}
- bx r0
- thumb_func_end PokeballGlowEffect_1
-
- thumb_func_start PokeballGlowEffect_2
-PokeballGlowEffect_2: @ 8086188
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r7, r0, 0
- ldrh r0, [r7, 0x30]
- subs r0, 0x1
- strh r0, [r7, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080861B8
- movs r0, 0x8
- strh r0, [r7, 0x30]
- ldrh r0, [r7, 0x32]
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- strh r0, [r7, 0x32]
- cmp r0, 0
- bne _080861B8
- ldrh r0, [r7, 0x34]
- adds r0, 0x1
- strh r0, [r7, 0x34]
-_080861B8:
- ldrh r4, [r7, 0x32]
- adds r4, 0x3
- movs r0, 0x3
- mov r8, r0
- mov r1, r8
- ands r4, r1
- ldr r3, _080862B0 @ =0x00001007
- mov r10, r3
- mov r0, r10
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- movs r1, 0x84
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- ldr r6, _080862B4 @ =gUnknown_0839F2C0
- adds r1, r4, r6
- ldrb r1, [r1]
- ldr r5, _080862B8 @ =gUnknown_0839F2C4
- adds r2, r4, r5
- ldrb r2, [r2]
- ldr r3, _080862BC @ =gUnknown_0839F2C8
- mov r9, r3
- add r4, r9
- ldrb r3, [r4]
- bl MultiplyInvertedPaletteRGBComponents
- ldrh r4, [r7, 0x32]
- adds r4, 0x2
- mov r0, r8
- ands r4, r0
- mov r0, r10
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- movs r1, 0x83
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- adds r1, r4, r6
- ldrb r1, [r1]
- adds r2, r4, r5
- ldrb r2, [r2]
- add r4, r9
- ldrb r3, [r4]
- bl MultiplyInvertedPaletteRGBComponents
- ldrh r4, [r7, 0x32]
- adds r4, 0x1
- mov r3, r8
- ands r4, r3
- mov r0, r10
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- movs r1, 0x81
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- adds r1, r4, r6
- ldrb r1, [r1]
- adds r2, r4, r5
- ldrb r2, [r2]
- add r4, r9
- ldrb r3, [r4]
- bl MultiplyInvertedPaletteRGBComponents
- ldrh r4, [r7, 0x32]
- lsls r4, 24
- lsrs r4, 24
- mov r0, r10
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- ldr r3, _080862C0 @ =0x01050000
- adds r0, r3
- lsrs r0, 16
- adds r6, r4, r6
- ldrb r6, [r6]
- adds r5, r4, r5
- ldrb r5, [r5]
- add r4, r9
- ldrb r4, [r4]
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- mov r0, r10
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- ldr r1, _080862C4 @ =0x01030000
- adds r0, r1
- lsrs r0, 16
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- movs r3, 0x34
- ldrsh r0, [r7, r3]
- cmp r0, 0x2
- ble _080862A2
- ldrh r0, [r7, 0x2E]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r7, 0x2E]
- movs r0, 0x8
- strh r0, [r7, 0x30]
- strh r1, [r7, 0x32]
-_080862A2:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080862B0: .4byte 0x00001007
-_080862B4: .4byte gUnknown_0839F2C0
-_080862B8: .4byte gUnknown_0839F2C4
-_080862BC: .4byte gUnknown_0839F2C8
-_080862C0: .4byte 0x01050000
-_080862C4: .4byte 0x01030000
- thumb_func_end PokeballGlowEffect_2
-
- thumb_func_start PokeballGlowEffect_3
-PokeballGlowEffect_3: @ 80862C8
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r2, r0, 0
- ldrh r0, [r2, 0x30]
- subs r0, 0x1
- strh r0, [r2, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080862F8
- movs r0, 0x8
- strh r0, [r2, 0x30]
- ldrh r0, [r2, 0x32]
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- strh r0, [r2, 0x32]
- cmp r0, 0x3
- bne _080862F8
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
- movs r0, 0x1E
- strh r0, [r2, 0x30]
-_080862F8:
- ldrh r4, [r2, 0x32]
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080863A4 @ =0x00001007
- mov r8, r0
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- movs r1, 0x84
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- ldr r1, _080863A8 @ =gUnknown_0839F2C0
- adds r1, r4, r1
- ldrb r6, [r1]
- ldr r1, _080863AC @ =gUnknown_0839F2C4
- adds r1, r4, r1
- ldrb r5, [r1]
- ldr r1, _080863B0 @ =gUnknown_0839F2C8
- adds r4, r1
- ldrb r4, [r4]
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- mov r0, r8
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- movs r1, 0x83
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- mov r0, r8
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- movs r1, 0x81
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- mov r0, r8
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- ldr r1, _080863B4 @ =0x01050000
- adds r0, r1
- lsrs r0, 16
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- mov r0, r8
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- ldr r1, _080863B8 @ =0x01030000
- adds r0, r1
- lsrs r0, 16
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080863A4: .4byte 0x00001007
-_080863A8: .4byte gUnknown_0839F2C0
-_080863AC: .4byte gUnknown_0839F2C4
-_080863B0: .4byte gUnknown_0839F2C8
-_080863B4: .4byte 0x01050000
-_080863B8: .4byte 0x01030000
- thumb_func_end PokeballGlowEffect_3
-
- thumb_func_start PokeballGlowEffect_4
-PokeballGlowEffect_4: @ 80863BC
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- subs r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080863D2
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
-_080863D2:
- pop {r0}
- bx r0
- thumb_func_end PokeballGlowEffect_4
-
- thumb_func_start PokeballGlowEffect_5
-PokeballGlowEffect_5: @ 80863D8
- ldrh r1, [r0, 0x2E]
- adds r1, 0x1
- strh r1, [r0, 0x2E]
- bx lr
- thumb_func_end PokeballGlowEffect_5
-
- thumb_func_start PokeballGlowEffect_6
-PokeballGlowEffect_6: @ 80863E0
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080863F6
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _080863FC
-_080863F6:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_080863FC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end PokeballGlowEffect_6
-
- thumb_func_start PokeballGlowEffect_7
-PokeballGlowEffect_7: @ 8086404
- bx lr
- thumb_func_end PokeballGlowEffect_7
-
- thumb_func_start SpriteCB_PokeballGlow
-SpriteCB_PokeballGlow: @ 8086408
- push {lr}
- adds r3, r0, 0
- ldr r2, _0808642C @ =gSprites
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2E
- ldrsh r0, [r0, r1]
- cmp r0, 0x4
- ble _08086428
- adds r0, r3, 0
- bl FieldEffectFreeGraphicsResources
-_08086428:
- pop {r0}
- bx r0
- .align 2, 0
-_0808642C: .4byte gSprites
- thumb_func_end SpriteCB_PokeballGlow
-
- thumb_func_start PokecenterHealEffectHelper
-PokecenterHealEffectHelper: @ 8086430
- push {r4,lr}
- adds r3, r0, 0
- adds r2, r1, 0
- ldr r0, _08086480 @ =gSpriteTemplate_839F220
- lsls r3, 16
- asrs r3, 16
- lsls r2, 16
- asrs r2, 16
- adds r1, r3, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _08086484 @ =gSprites
- adds r0, r1
- ldrb r2, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- movs r2, 0x8
- orrs r1, r2
- strb r1, [r0, 0x5]
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r3]
- ldr r1, _08086488 @ =gUnknown_0839F1A0
- bl SetSubspriteTables
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08086480: .4byte gSpriteTemplate_839F220
-_08086484: .4byte gSprites
-_08086488: .4byte gUnknown_0839F1A0
- thumb_func_end PokecenterHealEffectHelper
-
- thumb_func_start SpriteCB_PokecenterMonitor
-SpriteCB_PokecenterMonitor: @ 808648C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080864B0
- movs r0, 0
- strh r0, [r4, 0x2E]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- subs r0, 0x5
- ands r0, r1
- strb r0, [r2]
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
-_080864B0:
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080864C4
- adds r0, r4, 0
- bl FieldEffectFreeGraphicsResources
-_080864C4:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_PokecenterMonitor
-
- thumb_func_start HallOfFameRecordEffectHelper
-HallOfFameRecordEffectHelper: @ 80864CC
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 24
- cmp r3, 0
- bne _08086514
- ldr r0, _08086508 @ =gSpriteTemplate_839F238
- lsls r1, 16
- asrs r1, 16
- lsls r2, 16
- asrs r2, 16
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, _0808650C @ =gSprites
- adds r0, r1
- ldr r1, _08086510 @ =gUnknown_0839F1C8
- bl SetSubspriteTables
- b _08086528
- .align 2, 0
-_08086508: .4byte gSpriteTemplate_839F238
-_0808650C: .4byte gSprites
-_08086510: .4byte gUnknown_0839F1C8
-_08086514:
- ldr r0, _08086548 @ =gSpriteTemplate_839F250
- lsls r1, 16
- asrs r1, 16
- lsls r2, 16
- asrs r2, 16
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r4, r0, 24
-_08086528:
- ldr r1, _0808654C @ =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r3]
- strh r5, [r0, 0x2E]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086548: .4byte gSpriteTemplate_839F250
-_0808654C: .4byte gSprites
- thumb_func_end HallOfFameRecordEffectHelper
-
- thumb_func_start SpriteCB_HallOfFameMonitor
-SpriteCB_HallOfFameMonitor: @ 8086550
- push {lr}
- adds r3, r0, 0
- ldr r2, _080865B8 @ =gTasks
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x26
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _080865A6
- ldrh r1, [r3, 0x30]
- movs r2, 0x30
- ldrsh r0, [r3, r2]
- cmp r0, 0
- beq _0808657E
- subs r0, r1, 0x1
- strh r0, [r3, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080865A0
-_0808657E:
- movs r0, 0x10
- strh r0, [r3, 0x30]
- movs r0, 0x3E
- adds r0, r3
- mov r12, r0
- ldrb r2, [r0]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
-_080865A0:
- ldrh r0, [r3, 0x32]
- adds r0, 0x1
- strh r0, [r3, 0x32]
-_080865A6:
- movs r2, 0x32
- ldrsh r0, [r3, r2]
- cmp r0, 0x7F
- ble _080865B4
- adds r0, r3, 0
- bl FieldEffectFreeGraphicsResources
-_080865B4:
- pop {r0}
- bx r0
- .align 2, 0
-_080865B8: .4byte gTasks
- thumb_func_end SpriteCB_HallOfFameMonitor
-
- thumb_func_start sub_80865BC
-sub_80865BC: @ 80865BC
- push {lr}
- ldr r0, _080865D0 @ =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- ldr r1, _080865D4 @ =gUnknown_0300485C
- ldr r0, _080865D8 @ =mapldr_080842E8
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080865D0: .4byte c2_exit_to_overworld_2_switch
-_080865D4: .4byte gUnknown_0300485C
-_080865D8: .4byte mapldr_080842E8
- thumb_func_end sub_80865BC
-
- thumb_func_start mapldr_080842E8
-mapldr_080842E8: @ 80865DC
- push {lr}
- bl pal_fill_black
- ldr r0, _080865FC @ =task00_8084310
- movs r1, 0
- bl CreateTask
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r1, _08086600 @ =gUnknown_0300485C
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080865FC: .4byte task00_8084310
-_08086600: .4byte gUnknown_0300485C
- thumb_func_end mapldr_080842E8
-
- thumb_func_start task00_8084310
-task00_8084310: @ 8086604
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _0808666C @ =gTasks
- adds r4, r0, r1
- movs r0, 0x8
- ldrsh r5, [r4, r0]
- cmp r5, 0
- bne _08086640
- bl sub_807D770
- lsls r0, 24
- cmp r0, 0
- beq _08086666
- ldr r1, _08086670 @ =gUnknown_0202FF84
- ldr r0, _08086674 @ =gLastFieldPokeMenuOpened
- ldrb r0, [r0]
- str r0, [r1]
- cmp r0, 0x5
- ble _08086634
- str r5, [r1]
-_08086634:
- movs r0, 0x1F
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08086640:
- movs r0, 0x1F
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08086666
- bl flag_var_implications_of_teleport_
- bl warp_in
- ldr r0, _08086678 @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r1, _0808667C @ =gUnknown_0300485C
- ldr r0, _08086680 @ =mapldr_08084390
- str r0, [r1]
- adds r0, r6, 0
- bl DestroyTask
-_08086666:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808666C: .4byte gTasks
-_08086670: .4byte gUnknown_0202FF84
-_08086674: .4byte gLastFieldPokeMenuOpened
-_08086678: .4byte CB2_LoadMap
-_0808667C: .4byte gUnknown_0300485C
-_08086680: .4byte mapldr_08084390
- thumb_func_end task00_8084310
-
- thumb_func_start mapldr_08084390
-mapldr_08084390: @ 8086684
- push {r4,lr}
- bl sub_8053E90
- bl pal_fill_black
- ldr r0, _080866DC @ =c3_080843F8
- movs r1, 0
- bl CreateTask
- ldr r4, _080866E0 @ =gMapObjects
- ldr r3, _080866E4 @ =gPlayerAvatar
- ldrb r1, [r3, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0, 0x1]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x1]
- ldrb r1, [r3]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080866C6
- ldrb r1, [r3, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x3
- bl FieldObjectTurn
-_080866C6:
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r1, _080866E8 @ =gUnknown_0300485C
- movs r0, 0
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080866DC: .4byte c3_080843F8
-_080866E0: .4byte gMapObjects
-_080866E4: .4byte gPlayerAvatar
-_080866E8: .4byte gUnknown_0300485C
- thumb_func_end mapldr_08084390
-
- thumb_func_start c3_080843F8
-c3_080843F8: @ 80866EC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _08086740 @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0808671E
- ldr r0, _08086744 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08086738
- movs r0, 0x20
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0808671E:
- movs r0, 0x20
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08086738
- bl ScriptContext2_Disable
- bl UnfreezeMapObjects
- adds r0, r5, 0
- bl DestroyTask
-_08086738:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086740: .4byte gTasks
-_08086744: .4byte gPaletteFade
- thumb_func_end c3_080843F8
-
- thumb_func_start sub_8086748
-sub_8086748: @ 8086748
- push {lr}
- bl sub_8053E90
- bl pal_fill_for_map_transition
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r0, _0808676C @ =sub_8086774
- movs r1, 0
- bl CreateTask
- ldr r1, _08086770 @ =gUnknown_0300485C
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0808676C: .4byte sub_8086774
-_08086770: .4byte gUnknown_0300485C
- thumb_func_end sub_8086748
-
- thumb_func_start sub_8086774
-sub_8086774: @ 8086774
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080867A4 @ =gTasks
- adds r4, r1, r0
- ldr r5, _080867A8 @ =gUnknown_0839F2CC
-_08086786:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _08086786
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080867A4: .4byte gTasks
-_080867A8: .4byte gUnknown_0839F2CC
- thumb_func_end sub_8086774
-
- thumb_func_start sub_80867AC
-sub_80867AC: @ 80867AC
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- mov r9, r0
- ldr r6, _08086848 @ =gPlayerAvatar
- ldrb r0, [r6, 0x5]
- lsls r5, r0, 3
- adds r5, r0
- lsls r5, 2
- ldr r0, _0808684C @ =gMapObjects
- mov r8, r0
- add r5, r8
- ldrb r0, [r6, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08086850 @ =gSprites
- adds r4, r0
- bl CameraObjectReset2
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- add r0, r8
- ldrb r1, [r0, 0x1]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x1]
- movs r0, 0x1
- strb r0, [r6, 0x6]
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- bl GetFaceDirectionAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl FieldObjectSetSpecialAnim
- adds r3, r4, 0
- adds r3, 0x42
- ldrb r0, [r3]
- lsrs r0, 6
- mov r1, r9
- strh r0, [r1, 0x10]
- ldrb r0, [r5, 0x3]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r5, 0x3]
- ldrb r1, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x5]
- ldrb r1, [r3]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r3]
- mov r1, r9
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- movs r0, 0x1
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08086848: .4byte gPlayerAvatar
-_0808684C: .4byte gMapObjects
-_08086850: .4byte gSprites
- thumb_func_end sub_80867AC
-
- thumb_func_start sub_8086854
-sub_8086854: @ 8086854
- push {r4,lr}
- adds r4, r0, 0
- bl sub_807D770
- lsls r0, 24
- cmp r0, 0
- beq _08086868
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08086868:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8086854
-
- thumb_func_start sub_8086870
-sub_8086870: @ 8086870
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, _080868D4 @ =gPlayerAvatar
- ldrb r0, [r6, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080868D8 @ =gSprites
- adds r2, r0
- adds r0, r2, 0
- adds r0, 0x29
- movs r4, 0
- ldrsb r4, [r0, r4]
- lsls r0, r4, 17
- negs r0, r0
- ldrh r1, [r2, 0x22]
- ldr r3, _080868DC @ =gSpriteCoordOffsetY
- adds r1, r4
- ldrh r3, [r3]
- adds r1, r3
- asrs r0, 16
- adds r0, r1
- negs r0, r0
- movs r1, 0
- strh r0, [r2, 0x26]
- movs r0, 0x1
- strh r0, [r5, 0xA]
- strh r1, [r5, 0xC]
- ldr r2, _080868E0 @ =gMapObjects
- ldrb r0, [r6, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- movs r0, 0x2B
- bl PlaySE
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080868D4: .4byte gPlayerAvatar
-_080868D8: .4byte gSprites
-_080868DC: .4byte gSpriteCoordOffsetY
-_080868E0: .4byte gMapObjects
- thumb_func_end sub_8086870
-
- thumb_func_start sub_80868E4
-sub_80868E4: @ 80868E4
- push {r4-r6,lr}
- adds r4, r0, 0
- ldr r2, _08086990 @ =gPlayerAvatar
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086994 @ =gMapObjects
- adds r6, r0, r1
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086998 @ =gSprites
- adds r5, r0, r1
- ldrh r0, [r4, 0xA]
- ldrh r1, [r5, 0x26]
- adds r0, r1
- strh r0, [r5, 0x26]
- ldrh r2, [r4, 0xA]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- bgt _08086926
- ldrh r1, [r4, 0xC]
- adds r0, r2, r1
- strh r0, [r4, 0xC]
- movs r1, 0xF
- ands r0, r1
- cmp r0, 0
- beq _08086926
- lsls r0, r2, 1
- strh r0, [r4, 0xA]
-_08086926:
- ldrh r2, [r4, 0xE]
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08086964
- movs r0, 0x26
- ldrsh r1, [r5, r0]
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- blt _08086964
- adds r0, r2, 0x1
- strh r0, [r4, 0xE]
- ldrb r1, [r6, 0x3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r6, 0x3]
- ldrb r1, [r4, 0x10]
- adds r3, r5, 0
- adds r3, 0x42
- lsls r1, 6
- ldrb r2, [r3]
- movs r0, 0x3F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- ldrb r0, [r6]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r6]
-_08086964:
- movs r1, 0x26
- ldrsh r0, [r5, r1]
- cmp r0, 0
- blt _08086988
- movs r0, 0xD6
- bl PlaySE
- ldrb r0, [r6]
- movs r1, 0x8
- orrs r0, r1
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r6]
- movs r0, 0
- strh r0, [r5, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08086988:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08086990: .4byte gPlayerAvatar
-_08086994: .4byte gMapObjects
-_08086998: .4byte gSprites
- thumb_func_end sub_80868E4
-
- thumb_func_start sub_808699C
-sub_808699C: @ 808699C
- push {lr}
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- movs r2, 0
- strh r1, [r0, 0x8]
- movs r1, 0x4
- strh r1, [r0, 0xA]
- strh r2, [r0, 0xC]
- movs r0, 0
- bl SetCameraPanningCallback
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end sub_808699C
-
- thumb_func_start sub_80869B8
-sub_80869B8: @ 80869B8
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0
- bl SetCameraPanning
- ldrh r0, [r4, 0xA]
- negs r2, r0
- strh r2, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _080869E0
- lsls r0, r2, 16
- asrs r0, 17
- strh r0, [r4, 0xA]
-_080869E0:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080869EE
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080869EE:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80869B8
-
- thumb_func_start sub_80869F8
-sub_80869F8: @ 80869F8
- push {lr}
- ldr r1, _08086A24 @ =gPlayerAvatar
- movs r0, 0
- strb r0, [r1, 0x6]
- bl ScriptContext2_Disable
- bl CameraObjectReset1
- bl UnfreezeMapObjects
- bl InstallCameraPanAheadCallback
- ldr r0, _08086A28 @ =sub_8086774
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08086A24: .4byte gPlayerAvatar
-_08086A28: .4byte sub_8086774
- thumb_func_end sub_80869F8
-
- thumb_func_start sub_8086A2C
-sub_8086A2C: @ 8086A2C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _08086A60 @ =sub_8086A68
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08086A64 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0xA]
- cmp r4, 0x6A
- bne _08086A58
- movs r0, 0x1
- strh r0, [r1, 0xA]
-_08086A58:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08086A60: .4byte sub_8086A68
-_08086A64: .4byte gTasks
- thumb_func_end sub_8086A2C
-
- thumb_func_start sub_8086A68
-sub_8086A68: @ 8086A68
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08086A98 @ =gTasks
- adds r4, r1, r0
- ldr r5, _08086A9C @ =gUnknown_0839F2E8
-_08086A7A:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _08086A7A
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086A98: .4byte gTasks
-_08086A9C: .4byte gUnknown_0839F2E8
- thumb_func_end sub_8086A68
-
- thumb_func_start sub_8086AA0
-sub_8086AA0: @ 8086AA0
- push {r4,lr}
- adds r4, r0, 0
- bl FreezeMapObjects
- bl CameraObjectReset2
- ldrb r0, [r4, 0xA]
- bl sub_80B4824
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8086AA0
-
- thumb_func_start sub_8086AC0
-sub_8086AC0: @ 8086AC0
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08086B28 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086B2C @ =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _08086AEA
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _08086B1E
-_08086AEA:
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- bl GetFaceDirectionAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r5, 0x8]
- strh r1, [r5, 0xC]
- strh r1, [r5, 0xE]
- ldrb r0, [r5, 0xA]
- cmp r0, 0
- bne _08086B18
- movs r0, 0x4
- strh r0, [r5, 0x8]
-_08086B18:
- movs r0, 0x50
- bl PlaySE
-_08086B1E:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08086B28: .4byte gPlayerAvatar
-_08086B2C: .4byte gMapObjects
- thumb_func_end sub_8086AC0
-
- thumb_func_start sub_8086B30
-sub_8086B30: @ 8086B30
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8086B98
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x3
- ble _08086B4A
- bl sub_8086C30
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08086B4A:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8086B30
-
- thumb_func_start sub_8086B54
-sub_8086B54: @ 8086B54
- push {lr}
- bl sub_8086B98
- bl sub_8086C40
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_8086B54
-
- thumb_func_start sub_8086B64
-sub_8086B64: @ 8086B64
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8086BE4
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x3
- ble _08086B7E
- bl sub_8086C30
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08086B7E:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8086B64
-
- thumb_func_start sub_8086B88
-sub_8086B88: @ 8086B88
- push {lr}
- bl sub_8086BE4
- bl sub_8086C40
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_8086B88
-
- thumb_func_start sub_8086B98
-sub_8086B98: @ 8086B98
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08086BDC @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08086BE0 @ =gSprites
- adds r4, r0
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- movs r0, 0x84
- bl Cos
- strh r0, [r4, 0x24]
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- movs r0, 0x94
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- strh r0, [r5, 0xE]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08086BD6
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
-_08086BD6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086BDC: .4byte gPlayerAvatar
-_08086BE0: .4byte gSprites
- thumb_func_end sub_8086B98
-
- thumb_func_start sub_8086BE4
-sub_8086BE4: @ 8086BE4
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08086C28 @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08086C2C @ =gSprites
- adds r4, r0
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- movs r0, 0x7C
- bl Cos
- strh r0, [r4, 0x24]
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- movs r0, 0x76
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- strh r0, [r5, 0xE]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08086C22
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
-_08086C22:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086C28: .4byte gPlayerAvatar
-_08086C2C: .4byte gSprites
- thumb_func_end sub_8086BE4
-
- thumb_func_start sub_8086C30
-sub_8086C30: @ 8086C30
- push {lr}
- bl sub_8053FF8
- bl fade_8080918
- pop {r0}
- bx r0
- thumb_func_end sub_8086C30
-
- thumb_func_start sub_8086C40
-sub_8086C40: @ 8086C40
- push {lr}
- ldr r0, _08086C80 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08086C7C
- bl sub_8054034
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08086C7C
- bl sub_80B483C
- bl warp_in
- ldr r1, _08086C84 @ =gUnknown_0300485C
- ldr r0, _08086C88 @ =sub_8086C94
- str r0, [r1]
- ldr r0, _08086C8C @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r0, _08086C90 @ =sub_8086A68
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08086C7C:
- pop {r0}
- bx r0
- .align 2, 0
-_08086C80: .4byte gPaletteFade
-_08086C84: .4byte gUnknown_0300485C
-_08086C88: .4byte sub_8086C94
-_08086C8C: .4byte CB2_LoadMap
-_08086C90: .4byte sub_8086A68
- thumb_func_end sub_8086C40
-
- thumb_func_start sub_8086C94
-sub_8086C94: @ 8086C94
- push {lr}
- bl sub_8053E90
- bl pal_fill_for_map_transition
- bl ScriptContext2_Enable
- ldr r0, _08086CB4 @ =sub_8086CBC
- movs r1, 0
- bl CreateTask
- ldr r1, _08086CB8 @ =gUnknown_0300485C
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08086CB4: .4byte sub_8086CBC
-_08086CB8: .4byte gUnknown_0300485C
- thumb_func_end sub_8086C94
-
- thumb_func_start sub_8086CBC
-sub_8086CBC: @ 8086CBC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08086CEC @ =gTasks
- adds r4, r1, r0
- ldr r5, _08086CF0 @ =gUnknown_0839F300
-_08086CCE:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _08086CCE
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086CEC: .4byte gTasks
-_08086CF0: .4byte gUnknown_0839F300
- thumb_func_end sub_8086CBC
-
- thumb_func_start sub_8086CF4
-sub_8086CF4: @ 8086CF4
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- bl CameraObjectReset2
- ldr r0, _08086D54 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _08086D58 @ =gMapObjects
- adds r4, r0
- movs r0, 0x4
- bl GetFaceDirectionAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r1, r0, 24
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0x10
- strh r0, [r5, 0xA]
- cmp r1, 0x6B
- bne _08086D5C
- movs r1, 0x1
- movs r0, 0x3
- strh r0, [r5, 0x8]
- b _08086D5E
- .align 2, 0
-_08086D54: .4byte gPlayerAvatar
-_08086D58: .4byte gMapObjects
-_08086D5C:
- movs r1, 0
-_08086D5E:
- adds r0, r1, 0
- bl sub_80B4824
- movs r0, 0x1
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8086CF4
-
- thumb_func_start sub_8086D70
-sub_8086D70: @ 8086D70
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08086DA8 @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08086DAC @ =gSprites
- adds r4, r0
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x84
- bl Cos
- strh r0, [r4, 0x24]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x94
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08086DA8: .4byte gPlayerAvatar
-_08086DAC: .4byte gSprites
- thumb_func_end sub_8086D70
-
- thumb_func_start sub_8086DB0
-sub_8086DB0: @ 8086DB0
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, _08086E08 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086E0C @ =gSprites
- adds r5, r0, r1
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x84
- bl Cos
- strh r0, [r5, 0x24]
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x94
- bl Sin
- strh r0, [r5, 0x26]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08086DEE
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
-_08086DEE:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08086DFE
- strh r0, [r5, 0x24]
- strh r0, [r5, 0x26]
- movs r0, 0x5
- strh r0, [r4, 0x8]
-_08086DFE:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08086E08: .4byte gPlayerAvatar
-_08086E0C: .4byte gSprites
- thumb_func_end sub_8086DB0
-
- thumb_func_start sub_8086E10
-sub_8086E10: @ 8086E10
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08086E48 @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08086E4C @ =gSprites
- adds r4, r0
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x7C
- bl Cos
- strh r0, [r4, 0x24]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x76
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08086E48: .4byte gPlayerAvatar
-_08086E4C: .4byte gSprites
- thumb_func_end sub_8086E10
-
- thumb_func_start sub_8086E50
-sub_8086E50: @ 8086E50
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, _08086EA8 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086EAC @ =gSprites
- adds r5, r0, r1
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x7C
- bl Cos
- strh r0, [r5, 0x24]
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x76
- bl Sin
- strh r0, [r5, 0x26]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08086E8E
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
-_08086E8E:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08086EA0
- strh r0, [r5, 0x24]
- strh r0, [r5, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08086EA0:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08086EA8: .4byte gPlayerAvatar
-_08086EAC: .4byte gSprites
- thumb_func_end sub_8086E50
-
- thumb_func_start sub_8086EB0
-sub_8086EB0: @ 8086EB0
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80B4850
- lsls r0, 24
- cmp r0, 0
- bne _08086ECC
- bl sub_80B483C
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- b _08086ECE
-_08086ECC:
- movs r0, 0
-_08086ECE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8086EB0
-
- thumb_func_start sub_8086ED4
-sub_8086ED4: @ 8086ED4
- push {r4,lr}
- ldr r0, _08086F20 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086F24 @ =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _08086F18
- bl CameraObjectReset1
- bl ScriptContext2_Disable
- movs r0, 0x4
- bl GetGoSpeed0AnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- ldr r0, _08086F28 @ =sub_8086CBC
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08086F18:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08086F20: .4byte gPlayerAvatar
-_08086F24: .4byte gMapObjects
-_08086F28: .4byte sub_8086CBC
- thumb_func_end sub_8086ED4
-
- thumb_func_start FldEff_UseWaterfall
-FldEff_UseWaterfall: @ 8086F2C
- push {r4,lr}
- ldr r4, _08086F58 @ =sub_8086F64
- adds r0, r4, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08086F5C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r2, _08086F60 @ =gUnknown_0202FF84
- ldr r2, [r2]
- strh r2, [r1, 0xA]
- bl _call_via_r4
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08086F58: .4byte sub_8086F64
-_08086F5C: .4byte gTasks
-_08086F60: .4byte gUnknown_0202FF84
- thumb_func_end FldEff_UseWaterfall
-
- thumb_func_start sub_8086F64
-sub_8086F64: @ 8086F64
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _08086FA0 @ =gUnknown_0839F31C
- ldr r2, _08086FA4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_08086F76:
- movs r0, 0x8
- ldrsh r2, [r4, r0]
- lsls r2, 2
- adds r2, r5
- ldr r0, _08086FA8 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _08086FAC @ =gMapObjects
- adds r1, r0
- ldr r2, [r2]
- adds r0, r4, 0
- bl _call_via_r2
- lsls r0, 24
- cmp r0, 0
- bne _08086F76
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086FA0: .4byte gUnknown_0839F31C
-_08086FA4: .4byte gTasks
-_08086FA8: .4byte gPlayerAvatar
-_08086FAC: .4byte gMapObjects
- thumb_func_end sub_8086F64
-
- thumb_func_start sub_8086FB0
-sub_8086FB0: @ 8086FB0
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- ldr r1, _08086FCC @ =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r1, 0x6]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08086FCC: .4byte gPlayerAvatar
- thumb_func_end sub_8086FB0
-
- thumb_func_start waterfall_1_do_anim_probably
-waterfall_1_do_anim_probably: @ 8086FD0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl ScriptContext2_Enable
- adds r0, r5, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- bne _08087000
- adds r0, r5, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- ldr r1, _08087008 @ =gUnknown_0202FF84
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- str r0, [r1]
- movs r0, 0x3B
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08087000:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08087008: .4byte gUnknown_0202FF84
- thumb_func_end waterfall_1_do_anim_probably
-
- thumb_func_start waterfall_2_wait_anim_finish_probably
-waterfall_2_wait_anim_finish_probably: @ 808700C
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x6
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08087026
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- b _08087028
-_08087026:
- movs r0, 0
-_08087028:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end waterfall_2_wait_anim_finish_probably
-
- thumb_func_start sub_8087030
-sub_8087030: @ 8087030
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- movs r0, 0x2
- bl GetSimpleGoAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8087030
-
- thumb_func_start sub_8087058
-sub_8087058: @ 8087058
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- bne _0808706E
- movs r0, 0
- b _080870AA
-_0808706E:
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsWaterfall
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080870A4
- bl ScriptContext2_Disable
- ldr r0, _0808709C @ =gPlayerAvatar
- strb r4, [r0, 0x6]
- ldr r0, _080870A0 @ =sub_8086F64
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0x2B
- bl FieldEffectActiveListRemove
- movs r0, 0
- b _080870AA
- .align 2, 0
-_0808709C: .4byte gPlayerAvatar
-_080870A0: .4byte sub_8086F64
-_080870A4:
- movs r0, 0x3
- strh r0, [r5, 0x8]
- movs r0, 0x1
-_080870AA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8087058
-
- thumb_func_start FldEff_UseDive
-FldEff_UseDive: @ 80870B0
- push {r4,lr}
- ldr r4, _080870E0 @ =Task_Dive
- adds r0, r4, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080870E4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r3, _080870E8 @ =gUnknown_0202FF84
- ldr r2, [r3]
- strh r2, [r1, 0x26]
- ldr r2, [r3, 0x4]
- strh r2, [r1, 0x24]
- bl _call_via_r4
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080870E0: .4byte Task_Dive
-_080870E4: .4byte gTasks
-_080870E8: .4byte gUnknown_0202FF84
- thumb_func_end FldEff_UseDive
-
- thumb_func_start Task_Dive
-Task_Dive: @ 80870EC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0808711C @ =gUnknown_0839F330
- ldr r2, _08087120 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_080870FE:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _080870FE
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808711C: .4byte gUnknown_0839F330
-_08087120: .4byte gTasks
- thumb_func_end Task_Dive
-
- thumb_func_start sub_8087124
-sub_8087124: @ 8087124
- ldr r2, _08087134 @ =gPlayerAvatar
- movs r1, 0x1
- strb r1, [r2, 0x6]
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- movs r0, 0
- bx lr
- .align 2, 0
-_08087134: .4byte gPlayerAvatar
- thumb_func_end sub_8087124
-
- thumb_func_start dive_2_unknown
-dive_2_unknown: @ 8087138
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- ldr r1, _0808715C @ =gUnknown_0202FF84
- movs r2, 0x26
- ldrsh r0, [r4, r2]
- str r0, [r1]
- movs r0, 0x3B
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0808715C: .4byte gUnknown_0202FF84
- thumb_func_end dive_2_unknown
-
- thumb_func_start dive_3_unknown
-dive_3_unknown: @ 8087160
- push {lr}
- sub sp, 0x8
- mov r1, sp
- adds r1, 0x2
- mov r0, sp
- bl PlayerGetDestCoords
- movs r0, 0x6
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _080871A4
- ldr r2, _080871AC @ =gMapObjects
- ldr r0, _080871B0 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1E]
- mov r0, sp
- bl dive_warp
- ldr r0, _080871B4 @ =Task_Dive
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0x2C
- bl FieldEffectActiveListRemove
-_080871A4:
- movs r0, 0
- add sp, 0x8
- pop {r1}
- bx r1
- .align 2, 0
-_080871AC: .4byte gMapObjects
-_080871B0: .4byte gPlayerAvatar
-_080871B4: .4byte Task_Dive
- thumb_func_end dive_3_unknown
-
- thumb_func_start sub_80871B8
-sub_80871B8: @ 80871B8
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _080871CC @ =sub_80871D0
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080871CC: .4byte sub_80871D0
- thumb_func_end sub_80871B8
-
- thumb_func_start sub_80871D0
-sub_80871D0: @ 80871D0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r6, _08087218 @ =gUnknown_0839F33C
- ldr r2, _0808721C @ =gTasks
- ldr r5, _08087220 @ =gPlayerAvatar
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_080871E4:
- movs r0, 0x8
- ldrsh r3, [r4, r0]
- lsls r3, 2
- adds r3, r6
- ldrb r0, [r5, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _08087224 @ =gMapObjects
- adds r1, r0
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _08087228 @ =gSprites
- adds r2, r0
- ldr r3, [r3]
- adds r0, r4, 0
- bl _call_via_r3
- lsls r0, 24
- cmp r0, 0
- bne _080871E4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08087218: .4byte gUnknown_0839F33C
-_0808721C: .4byte gTasks
-_08087220: .4byte gPlayerAvatar
-_08087224: .4byte gMapObjects
-_08087228: .4byte gSprites
- thumb_func_end sub_80871D0
-
- thumb_func_start sub_808722C
-sub_808722C: @ 808722C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl FreezeMapObjects
- bl CameraObjectReset2
- movs r0, 0
- bl SetCameraPanningCallback
- ldr r0, _08087260 @ =gPlayerAvatar
- movs r2, 0x1
- strb r2, [r0, 0x6]
- ldrb r0, [r5, 0x3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r5, 0x3]
- strh r2, [r4, 0xA]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08087260: .4byte gPlayerAvatar
- thumb_func_end sub_808722C
-
- thumb_func_start sub_8087264
-sub_8087264: @ 8087264
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0
- bl SetCameraPanning
- ldrh r0, [r4, 0xA]
- negs r0, r0
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _08087290
- movs r0, 0
- strh r0, [r4, 0xC]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08087290:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8087264
-
- thumb_func_start sub_8087298
-sub_8087298: @ 8087298
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0
- strh r0, [r2, 0x26]
- movs r0, 0x1
- strh r0, [r4, 0xE]
- ldr r3, _080872E0 @ =gUnknown_0202FF84
- movs r5, 0x10
- ldrsh r0, [r1, r5]
- str r0, [r3]
- movs r5, 0x12
- ldrsh r0, [r1, r5]
- str r0, [r3, 0x4]
- adds r0, r2, 0
- adds r0, 0x43
- ldrb r0, [r0]
- subs r0, 0x1
- str r0, [r3, 0x8]
- ldrb r0, [r2, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r3, 0xC]
- movs r0, 0x32
- bl FieldEffectStart
- movs r0, 0xB2
- bl PlaySE
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080872E0: .4byte gUnknown_0202FF84
- thumb_func_end sub_8087298
-
- thumb_func_start sub_80872E4
-sub_80872E4: @ 80872E4
- push {r4-r7,lr}
- adds r4, r0, 0
- adds r6, r1, 0
- adds r5, r2, 0
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0
- bl SetCameraPanning
- ldrh r0, [r4, 0xA]
- negs r2, r0
- strh r2, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r1, r0, 0x1
- strh r1, [r4, 0xC]
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, 0x11
- bgt _0808731E
- movs r0, 0x1
- ands r1, r0
- cmp r1, 0
- bne _08087330
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x3
- bgt _08087330
- lsls r0, r2, 1
- b _0808732E
-_0808731E:
- movs r0, 0x4
- ands r1, r0
- cmp r1, 0
- bne _08087330
- lsls r0, r2, 16
- cmp r0, 0
- ble _08087330
- asrs r0, 17
-_0808732E:
- strh r0, [r4, 0xA]
-_08087330:
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x6
- ble _0808737C
- adds r0, r5, 0
- adds r0, 0x29
- movs r1, 0
- ldrsb r1, [r0, r1]
- lsls r2, r1, 17
- negs r2, r2
- movs r7, 0x26
- ldrsh r3, [r5, r7]
- movs r7, 0x22
- ldrsh r0, [r5, r7]
- adds r0, r1
- ldr r1, _08087374 @ =gSpriteCoordOffsetY
- movs r7, 0
- ldrsh r1, [r1, r7]
- adds r0, r1
- asrs r2, 16
- adds r0, r2
- cmn r3, r0
- ble _08087378
- ldrh r0, [r5, 0x26]
- ldrh r1, [r4, 0xE]
- subs r0, r1
- strh r0, [r5, 0x26]
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, 0x7
- bgt _0808737C
- adds r0, r1, 0x1
- strh r0, [r4, 0xE]
- b _0808737C
- .align 2, 0
-_08087374: .4byte gSpriteCoordOffsetY
-_08087378:
- movs r0, 0x1
- strh r0, [r4, 0x10]
-_0808737C:
- ldrh r2, [r4, 0x12]
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080873BA
- movs r7, 0x26
- ldrsh r1, [r5, r7]
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- bge _080873BA
- adds r0, r2, 0x1
- strh r0, [r4, 0x12]
- ldrb r0, [r6, 0x3]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r6, 0x3]
- ldrb r1, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r5, 0x5]
- adds r2, r5, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
-_080873BA:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080873D0
- movs r7, 0x10
- ldrsh r0, [r4, r7]
- cmp r0, 0
- beq _080873D0
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080873D0:
- movs r0, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80872E4
-
- thumb_func_start sub_80873D8
-sub_80873D8: @ 80873D8
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8053FF8
- bl fade_8080918
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80873D8
-
- thumb_func_start sub_80873F4
-sub_80873F4: @ 80873F4
- push {lr}
- ldr r0, _08087434 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808742C
- bl sub_8054034
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808742C
- bl warp_in
- ldr r1, _08087438 @ =gUnknown_0300485C
- ldr r0, _0808743C @ =mapldr_080851BC
- str r0, [r1]
- ldr r0, _08087440 @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r0, _08087444 @ =sub_80871D0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0808742C:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08087434: .4byte gPaletteFade
-_08087438: .4byte gUnknown_0300485C
-_0808743C: .4byte mapldr_080851BC
-_08087440: .4byte CB2_LoadMap
-_08087444: .4byte sub_80871D0
- thumb_func_end sub_80873F4
-
- thumb_func_start mapldr_080851BC
-mapldr_080851BC: @ 8087448
- push {lr}
- bl sub_8053E90
- bl pal_fill_for_map_transition
- bl ScriptContext2_Enable
- ldr r0, _08087468 @ =gUnknown_0300485C
- movs r1, 0
- str r1, [r0]
- ldr r0, _0808746C @ =sub_8087470
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_08087468: .4byte gUnknown_0300485C
-_0808746C: .4byte sub_8087470
- thumb_func_end mapldr_080851BC
-
- thumb_func_start sub_8087470
-sub_8087470: @ 8087470
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r6, _080874B8 @ =gUnknown_0839F354
- ldr r2, _080874BC @ =gTasks
- ldr r5, _080874C0 @ =gPlayerAvatar
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_08087484:
- movs r0, 0x8
- ldrsh r3, [r4, r0]
- lsls r3, 2
- adds r3, r6
- ldrb r0, [r5, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _080874C4 @ =gMapObjects
- adds r1, r0
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080874C8 @ =gSprites
- adds r2, r0
- ldr r3, [r3]
- adds r0, r4, 0
- bl _call_via_r3
- lsls r0, 24
- cmp r0, 0
- bne _08087484
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080874B8: .4byte gUnknown_0839F354
-_080874BC: .4byte gTasks
-_080874C0: .4byte gPlayerAvatar
-_080874C4: .4byte gMapObjects
-_080874C8: .4byte gSprites
- thumb_func_end sub_8087470
-
- thumb_func_start sub_80874CC
-sub_80874CC: @ 80874CC
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- bl CameraObjectReset2
- bl FreezeMapObjects
- ldr r1, _080874F8 @ =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r1, 0x6]
- ldrb r0, [r4, 0x1]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080874F8: .4byte gPlayerAvatar
- thumb_func_end sub_80874CC
-
- thumb_func_start sub_80874FC
-sub_80874FC: @ 80874FC
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- bl sub_807D770
- lsls r0, 24
- cmp r0, 0
- beq _0808753C
- ldr r1, _08087544 @ =gUnknown_0202FF84
- movs r2, 0x10
- ldrsh r0, [r5, r2]
- str r0, [r1]
- movs r2, 0x12
- ldrsh r0, [r5, r2]
- str r0, [r1, 0x4]
- adds r0, r6, 0
- adds r0, 0x43
- ldrb r0, [r0]
- subs r0, 0x1
- str r0, [r1, 0x8]
- ldrb r0, [r6, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r1, 0xC]
- movs r0, 0x31
- bl FieldEffectStart
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0808753C:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08087544: .4byte gUnknown_0202FF84
- thumb_func_end sub_80874FC
-
- thumb_func_start sub_8087548
-sub_8087548: @ 8087548
- push {r4,lr}
- adds r2, r0, 0
- adds r4, r1, 0
- movs r0, 0xA
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08087598 @ =gSprites
- adds r0, r1
- adds r0, 0x2B
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _08087590
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
- ldrb r1, [r4, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
- bl CameraObjectReset1
- movs r0, 0xAF
- bl PlaySE
- movs r0, 0x4
- bl sub_80608A4
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
-_08087590:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08087598: .4byte gSprites
- thumb_func_end sub_8087548
-
- thumb_func_start sub_808759C
-sub_808759C: @ 808759C
- push {lr}
- adds r0, r1, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080875C6
- ldr r1, _080875CC @ =gPlayerAvatar
- movs r0, 0
- strb r0, [r1, 0x6]
- bl ScriptContext2_Disable
- bl UnfreezeMapObjects
- ldr r0, _080875D0 @ =sub_8087470
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080875C6:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080875CC: .4byte gPlayerAvatar
-_080875D0: .4byte sub_8087470
- thumb_func_end sub_808759C
-
- thumb_func_start FldEff_LavaridgeGymWarp
-FldEff_LavaridgeGymWarp: @ 80875D4
- push {r4,lr}
- ldr r4, _0808762C @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08087630 @ =gFieldEffectObjectTemplatePointers
- adds r0, 0x84
- ldr r0, [r0]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- ldrb r3, [r4, 0x8]
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08087634 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- movs r1, 0x3
- ldrb r3, [r4, 0xC]
- ands r3, r1
- lsls r3, 2
- ldrb r4, [r2, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r4
- orrs r1, r3
- strb r1, [r2, 0x5]
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r3, 0x2
- orrs r1, r3
- strb r1, [r2]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0808762C: .4byte gUnknown_0202FF84
-_08087630: .4byte gFieldEffectObjectTemplatePointers
-_08087634: .4byte gSprites
- thumb_func_end FldEff_LavaridgeGymWarp
-
- thumb_func_start sub_8087638
-sub_8087638: @ 8087638
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08087650
- adds r0, r2, 0
- movs r1, 0x32
- bl FieldEffectStop
-_08087650:
- pop {r0}
- bx r0
- thumb_func_end sub_8087638
-
- thumb_func_start sub_8087654
-sub_8087654: @ 8087654
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _08087668 @ =sub_808766C
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_08087668: .4byte sub_808766C
- thumb_func_end sub_8087654
-
- thumb_func_start sub_808766C
-sub_808766C: @ 808766C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r6, _080876B4 @ =gUnknown_0839F364
- ldr r2, _080876B8 @ =gTasks
- ldr r5, _080876BC @ =gPlayerAvatar
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_08087680:
- movs r0, 0x8
- ldrsh r3, [r4, r0]
- lsls r3, 2
- adds r3, r6
- ldrb r0, [r5, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _080876C0 @ =gMapObjects
- adds r1, r0
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080876C4 @ =gSprites
- adds r2, r0
- ldr r3, [r3]
- adds r0, r4, 0
- bl _call_via_r3
- lsls r0, 24
- cmp r0, 0
- bne _08087680
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080876B4: .4byte gUnknown_0839F364
-_080876B8: .4byte gTasks
-_080876BC: .4byte gPlayerAvatar
-_080876C0: .4byte gMapObjects
-_080876C4: .4byte gSprites
- thumb_func_end sub_808766C
-
- thumb_func_start sub_80876C8
-sub_80876C8: @ 80876C8
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- bl FreezeMapObjects
- bl CameraObjectReset2
- ldr r1, _080876F4 @ =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r1, 0x6]
- ldrb r0, [r4, 0x3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4, 0x3]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080876F4: .4byte gPlayerAvatar
- thumb_func_end sub_80876C8
-
- thumb_func_start sub_80876F8
-sub_80876F8: @ 80876F8
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- adds r6, r2, 0
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _0808776C
- ldrh r1, [r5, 0xA]
- movs r2, 0xA
- ldrsh r0, [r5, r2]
- cmp r0, 0x3
- ble _0808774C
- ldr r1, _08087748 @ =gUnknown_0202FF84
- movs r2, 0x10
- ldrsh r0, [r4, r2]
- str r0, [r1]
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- str r0, [r1, 0x4]
- adds r0, r6, 0
- adds r0, 0x43
- ldrb r0, [r0]
- subs r0, 0x1
- str r0, [r1, 0x8]
- ldrb r0, [r6, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r1, 0xC]
- movs r0, 0x31
- bl FieldEffectStart
- strh r0, [r5, 0xA]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- b _0808776C
- .align 2, 0
-_08087748: .4byte gUnknown_0202FF84
-_0808774C:
- adds r0, r1, 0x1
- strh r0, [r5, 0xA]
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl GetStepInPlaceDelay4AnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- movs r0, 0x27
- bl PlaySE
-_0808776C:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80876F8
-
- thumb_func_start sub_8087774
-sub_8087774: @ 8087774
- push {r4,lr}
- adds r3, r0, 0
- adds r4, r1, 0
- ldr r2, _080877A8 @ =gSprites
- movs r0, 0xA
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x2B
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _0808779E
- ldrb r0, [r4, 0x1]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_0808779E:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080877A8: .4byte gSprites
- thumb_func_end sub_8087774
-
- thumb_func_start sub_80877AC
-sub_80877AC: @ 80877AC
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x31
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _080877CA
- bl sub_8053FF8
- bl fade_8080918
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080877CA:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80877AC
-
- thumb_func_start sub_80877D4
-sub_80877D4: @ 80877D4
- push {lr}
- ldr r0, _08087814 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808780C
- bl sub_8054034
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808780C
- bl warp_in
- ldr r1, _08087818 @ =gUnknown_0300485C
- ldr r0, _0808781C @ =sub_8086748
- str r0, [r1]
- ldr r0, _08087820 @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r0, _08087824 @ =sub_808766C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0808780C:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08087814: .4byte gPaletteFade
-_08087818: .4byte gUnknown_0300485C
-_0808781C: .4byte sub_8086748
-_08087820: .4byte CB2_LoadMap
-_08087824: .4byte sub_808766C
- thumb_func_end sub_80877D4
-
- thumb_func_start FldEff_PopOutOfAsh
-FldEff_PopOutOfAsh: @ 8087828
- push {r4,lr}
- ldr r4, _08087880 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08087884 @ =gFieldEffectObjectTemplatePointers
- adds r0, 0x80
- ldr r0, [r0]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- ldrb r3, [r4, 0x8]
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08087888 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- movs r1, 0x3
- ldrb r3, [r4, 0xC]
- ands r3, r1
- lsls r3, 2
- ldrb r4, [r2, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r4
- orrs r1, r3
- strb r1, [r2, 0x5]
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r3, 0x2
- orrs r1, r3
- strb r1, [r2]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08087880: .4byte gUnknown_0202FF84
-_08087884: .4byte gFieldEffectObjectTemplatePointers
-_08087888: .4byte gSprites
- thumb_func_end FldEff_PopOutOfAsh
-
- thumb_func_start sub_808788C
-sub_808788C: @ 808788C
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080878A4
- adds r0, r2, 0
- movs r1, 0x31
- bl FieldEffectStop
-_080878A4:
- pop {r0}
- bx r0
- thumb_func_end sub_808788C
-
- thumb_func_start sub_80878A8
-sub_80878A8: @ 80878A8
- push {lr}
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r0, _080878C0 @ =sub_80878C4
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080878C0: .4byte sub_80878C4
- thumb_func_end sub_80878A8
-
- thumb_func_start sub_80878C4
-sub_80878C4: @ 80878C4
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _080878EC @ =gUnknown_0839F378
- ldr r2, _080878F0 @ =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_080878EC: .4byte gUnknown_0839F378
-_080878F0: .4byte gTasks
- thumb_func_end sub_80878C4
-
- thumb_func_start sub_80878F4
-sub_80878F4: @ 80878F4
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x40
- strh r0, [r4, 0x24]
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x26]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80878F4
-
- thumb_func_start sub_8087914
-sub_8087914: @ 8087914
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _080879B8 @ =gUnknown_0839F380
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldrh r1, [r4, 0x24]
- movs r2, 0x24
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08087940
- subs r0, r1, 0x1
- strh r0, [r4, 0x24]
- lsls r0, 16
- cmp r0, 0
- bne _08087940
- bl sub_8053FF8
- bl fade_8080918
-_08087940:
- ldr r0, _080879BC @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080879C0 @ =gMapObjects
- adds r5, r0, r1
- adds r0, r5, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _08087966
- adds r0, r5, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _08087A20
-_08087966:
- movs r1, 0x24
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080879D8
- ldr r0, _080879C4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080879D8
- bl sub_8054034
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080879D8
- ldrh r1, [r4, 0x26]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl FieldObjectSetDirection
- bl sub_8053678
- bl warp_in
- ldr r1, _080879C8 @ =gUnknown_0300485C
- ldr r0, _080879CC @ =mapldr_080859D4
- str r0, [r1]
- ldr r0, _080879D0 @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r0, _080879D4 @ =sub_80878C4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- b _08087A20
- .align 2, 0
-_080879B8: .4byte gUnknown_0839F380
-_080879BC: .4byte gPlayerAvatar
-_080879C0: .4byte gMapObjects
-_080879C4: .4byte gPaletteFade
-_080879C8: .4byte gUnknown_0300485C
-_080879CC: .4byte mapldr_080859D4
-_080879D0: .4byte CB2_LoadMap
-_080879D4: .4byte sub_80878C4
-_080879D8:
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080879EC
- subs r0, r1, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _08087A20
-_080879EC:
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r0, [r0]
- bl GetFaceDirectionAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl FieldObjectSetSpecialAnim
- ldrh r1, [r4, 0xC]
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- cmp r0, 0xB
- bgt _08087A14
- adds r0, r1, 0x1
- strh r0, [r4, 0xC]
-_08087A14:
- ldrh r1, [r4, 0xC]
- lsls r1, 16
- asrs r1, 18
- movs r0, 0x8
- asrs r0, r1
- strh r0, [r4, 0xA]
-_08087A20:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8087914
-
- thumb_func_start mapldr_080859D4
-mapldr_080859D4: @ 8087A28
- push {lr}
- bl sub_8053E90
- bl pal_fill_for_map_transition
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r1, _08087A64 @ =gUnknown_0300485C
- movs r0, 0
- str r0, [r1]
- ldr r2, _08087A68 @ =gMapObjects
- ldr r0, _08087A6C @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x1]
- ldr r0, _08087A70 @ =sub_8087A74
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_08087A64: .4byte gUnknown_0300485C
-_08087A68: .4byte gMapObjects
-_08087A6C: .4byte gPlayerAvatar
-_08087A70: .4byte sub_8087A74
- thumb_func_end mapldr_080859D4
-
- thumb_func_start sub_8087A74
-sub_8087A74: @ 8087A74
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08087A9C @ =gUnknown_0839F388
- ldr r2, _08087AA0 @ =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_08087A9C: .4byte gUnknown_0839F388
-_08087AA0: .4byte gTasks
- thumb_func_end sub_8087A74
-
- thumb_func_start sub_8087AA4
-sub_8087AA4: @ 8087AA4
- push {r4,lr}
- adds r4, r0, 0
- bl sub_807D770
- lsls r0, 24
- cmp r0, 0
- beq _08087AC2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x26]
-_08087AC2:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8087AA4
-
- thumb_func_start sub_8087AC8
-sub_8087AC8: @ 8087AC8
- push {r4-r6,lr}
- sub sp, 0x8
- adds r5, r0, 0
- ldr r1, _08087B4C @ =gUnknown_0839F380
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r0, _08087B50 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08087B54 @ =gMapObjects
- adds r6, r0, r1
- ldrh r1, [r5, 0xA]
- movs r2, 0xA
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _08087AFA
- subs r0, r1, 0x1
- strh r0, [r5, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _08087B8C
-_08087AFA:
- adds r0, r6, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _08087B12
- adds r0, r6, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _08087BA0
-_08087B12:
- movs r1, 0xC
- ldrsh r0, [r5, r1]
- cmp r0, 0x1F
- ble _08087B5C
- movs r2, 0x26
- ldrsh r4, [r5, r2]
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bne _08087B5C
- ldrb r1, [r6, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- strb r0, [r6, 0x1]
- bl ScriptContext2_Disable
- bl UnfreezeMapObjects
- ldr r0, _08087B58 @ =sub_8087A74
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- b _08087BA0
- .align 2, 0
-_08087B4C: .4byte gUnknown_0839F380
-_08087B50: .4byte gPlayerAvatar
-_08087B54: .4byte gMapObjects
-_08087B58: .4byte sub_8087A74
-_08087B5C:
- ldrb r0, [r6, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r0, [r0]
- bl GetFaceDirectionAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl FieldObjectSetSpecialAnim
- ldrh r1, [r5, 0xC]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0x1F
- bgt _08087B84
- adds r0, r1, 0x1
- strh r0, [r5, 0xC]
-_08087B84:
- ldrh r0, [r5, 0xC]
- lsls r0, 16
- asrs r0, 18
- strh r0, [r5, 0xA]
-_08087B8C:
- ldrb r2, [r6, 0x1]
- lsls r1, r2, 26
- lsrs r1, 31
- movs r0, 0x1
- eors r1, r0
- lsls r1, 5
- subs r0, 0x22
- ands r0, r2
- orrs r0, r1
- strb r0, [r6, 0x1]
-_08087BA0:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8087AC8
-
- thumb_func_start sub_8087BA8
-sub_8087BA8: @ 8087BA8
- push {lr}
- ldr r0, _08087BB8 @ =sub_8087BBC
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_08087BB8: .4byte sub_8087BBC
- thumb_func_end sub_8087BA8
-
- thumb_func_start sub_8087BBC
-sub_8087BBC: @ 8087BBC
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08087BE4 @ =gUnknown_0839F390
- ldr r2, _08087BE8 @ =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_08087BE4: .4byte gUnknown_0839F390
-_08087BE8: .4byte gTasks
- thumb_func_end sub_8087BBC
-
- thumb_func_start sub_8087BEC
-sub_8087BEC: @ 8087BEC
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- bl CameraObjectReset2
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8087BEC
-
- thumb_func_start sub_8087C14
-sub_8087C14: @ 8087C14
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _08087C98 @ =gUnknown_0839F380
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r0, _08087C9C @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08087CA0 @ =gMapObjects
- adds r5, r0, r1
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08087C46
- subs r0, r1, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _08087C60
-_08087C46:
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r1, [r0]
- adds r0, r5, 0
- bl FieldObjectTurn
- movs r0, 0x8
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
-_08087C60:
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- ble _08087C8E
- movs r2, 0x26
- ldrsh r1, [r4, r2]
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- cmp r1, r0
- bne _08087C8E
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x4
- strh r0, [r4, 0xA]
- movs r0, 0x8
- strh r0, [r4, 0xC]
- movs r0, 0x1
- strh r0, [r4, 0xE]
- movs r0, 0x2D
- bl PlaySE
-_08087C8E:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08087C98: .4byte gUnknown_0839F380
-_08087C9C: .4byte gPlayerAvatar
-_08087CA0: .4byte gMapObjects
- thumb_func_end sub_8087C14
-
- thumb_func_start sub_8087CA4
-sub_8087CA4: @ 8087CA4
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _08087D68 @ =gUnknown_0839F380
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r2, _08087D6C @ =gPlayerAvatar
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08087D70 @ =gMapObjects
- adds r3, r0, r1
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08087D74 @ =gSprites
- adds r5, r0, r1
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bgt _08087CEE
- movs r0, 0x4
- strh r0, [r4, 0xA]
- ldrb r0, [r3, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r1, [r0]
- adds r0, r3, 0
- bl FieldObjectTurn
-_08087CEE:
- ldrh r0, [r5, 0x22]
- ldrh r1, [r4, 0xE]
- subs r0, r1
- strh r0, [r5, 0x22]
- ldrh r1, [r4, 0xE]
- ldrh r2, [r4, 0x10]
- adds r0, r1, r2
- strh r0, [r4, 0x10]
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bgt _08087D1A
- movs r0, 0x4
- strh r0, [r4, 0xC]
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, 0x7
- bgt _08087D1A
- lsls r0, r1, 1
- strh r0, [r4, 0xE]
-_08087D1A:
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r0, 0x8
- ble _08087D48
- ldrb r1, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r5, 0x5]
- adds r2, r5, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0xC0
- ands r0, r1
- cmp r0, 0
- beq _08087D48
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
-_08087D48:
- movs r2, 0x10
- ldrsh r0, [r4, r2]
- cmp r0, 0xA7
- ble _08087D5E
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- bl sub_8053FF8
- bl fade_8080918
-_08087D5E:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08087D68: .4byte gUnknown_0839F380
-_08087D6C: .4byte gPlayerAvatar
-_08087D70: .4byte gMapObjects
-_08087D74: .4byte gSprites
- thumb_func_end sub_8087CA4
-
- thumb_func_start sub_8087D78
-sub_8087D78: @ 8087D78
- push {lr}
- ldr r0, _08087DB8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08087DB4
- bl sub_8054034
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08087DB4
- bl sub_8053570
- bl warp_in
- ldr r0, _08087DBC @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r1, _08087DC0 @ =gUnknown_0300485C
- ldr r0, _08087DC4 @ =mapldr_08085D88
- str r0, [r1]
- ldr r0, _08087DC8 @ =sub_8087BBC
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08087DB4:
- pop {r0}
- bx r0
- .align 2, 0
-_08087DB8: .4byte gPaletteFade
-_08087DBC: .4byte CB2_LoadMap
-_08087DC0: .4byte gUnknown_0300485C
-_08087DC4: .4byte mapldr_08085D88
-_08087DC8: .4byte sub_8087BBC
- thumb_func_end sub_8087D78
-
- thumb_func_start mapldr_08085D88
-mapldr_08085D88: @ 8087DCC
- push {lr}
- bl sub_8053E90
- bl pal_fill_for_map_transition
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r1, _08087E0C @ =gUnknown_0300485C
- movs r0, 0
- str r0, [r1]
- ldr r2, _08087E10 @ =gMapObjects
- ldr r0, _08087E14 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x1]
- bl CameraObjectReset2
- ldr r0, _08087E18 @ =sub_8087E1C
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_08087E0C: .4byte gUnknown_0300485C
-_08087E10: .4byte gMapObjects
-_08087E14: .4byte gPlayerAvatar
-_08087E18: .4byte sub_8087E1C
- thumb_func_end mapldr_08085D88
-
- thumb_func_start sub_8087E1C
-sub_8087E1C: @ 8087E1C
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08087E44 @ =gUnknown_0839F3A0
- ldr r2, _08087E48 @ =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_08087E44: .4byte gUnknown_0839F3A0
-_08087E48: .4byte gTasks
- thumb_func_end sub_8087E1C
-
- thumb_func_start sub_8087E4C
-sub_8087E4C: @ 8087E4C
- push {r4-r6,lr}
- adds r6, r0, 0
- bl sub_807D770
- lsls r0, 24
- cmp r0, 0
- beq _08087EC2
- ldr r5, _08087EC8 @ =gPlayerAvatar
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _08087ECC @ =gSprites
- adds r2, r0
- adds r0, r2, 0
- adds r0, 0x29
- movs r4, 0
- ldrsb r4, [r0, r4]
- lsls r0, r4, 17
- negs r0, r0
- ldrh r1, [r2, 0x22]
- ldr r3, _08087ED0 @ =gSpriteCoordOffsetY
- adds r1, r4
- ldrh r3, [r3]
- adds r1, r3
- asrs r0, 16
- adds r0, r1
- negs r0, r0
- strh r0, [r2, 0x26]
- ldr r3, _08087ED4 @ =gMapObjects
- ldrb r0, [r5, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- ldrb r3, [r1, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r3
- strb r0, [r1, 0x1]
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- movs r0, 0x8
- strh r0, [r6, 0xA]
- movs r0, 0x1
- strh r0, [r6, 0xC]
- adds r2, 0x42
- ldrb r0, [r2]
- lsrs r0, 6
- strh r0, [r6, 0x24]
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x26]
- movs r0, 0x2D
- bl PlaySE
-_08087EC2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08087EC8: .4byte gPlayerAvatar
-_08087ECC: .4byte gSprites
-_08087ED0: .4byte gSpriteCoordOffsetY
-_08087ED4: .4byte gMapObjects
- thumb_func_end sub_8087E4C
-
- thumb_func_start sub_8087ED8
-sub_8087ED8: @ 8087ED8
- push {r4-r7,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _08087F40 @ =gUnknown_0839F380
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r2, _08087F44 @ =gPlayerAvatar
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08087F48 @ =gMapObjects
- adds r6, r0, r1
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08087F4C @ =gSprites
- adds r5, r0, r1
- ldrh r0, [r4, 0xA]
- ldrh r1, [r5, 0x26]
- adds r0, r1
- strh r0, [r5, 0x26]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x8
- negs r1, r1
- cmp r0, r1
- blt _08087F50
- ldrh r1, [r4, 0x22]
- movs r2, 0x22
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _08087F76
- adds r0, r1, 0x1
- strh r0, [r4, 0x22]
- ldrb r0, [r6]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r6]
- ldrh r1, [r4, 0x24]
- adds r3, r5, 0
- adds r3, 0x42
- lsls r1, 6
- ldrb r2, [r3]
- movs r0, 0x3F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- b _08087F76
- .align 2, 0
-_08087F40: .4byte gUnknown_0839F380
-_08087F44: .4byte gPlayerAvatar
-_08087F48: .4byte gMapObjects
-_08087F4C: .4byte gSprites
-_08087F50:
- ldrb r1, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r5, 0x5]
- adds r2, r5, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0xC0
- ands r0, r1
- cmp r0, 0
- beq _08087F76
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
-_08087F76:
- ldrh r2, [r5, 0x26]
- movs r3, 0x26
- ldrsh r1, [r5, r3]
- movs r0, 0x30
- negs r0, r0
- cmp r1, r0
- blt _08087F9A
- ldrh r1, [r4, 0xA]
- movs r3, 0xA
- ldrsh r0, [r4, r3]
- cmp r0, 0x1
- ble _08087F9A
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _08087F9A
- subs r0, r1, 0x1
- strh r0, [r4, 0xA]
-_08087F9A:
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- movs r7, 0
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _08087FBC
- movs r0, 0x4
- strh r0, [r4, 0xC]
- ldrb r0, [r6, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r1, [r0]
- adds r0, r6, 0
- bl FieldObjectTurn
-_08087FBC:
- movs r1, 0x26
- ldrsh r0, [r5, r1]
- cmp r0, 0
- blt _08087FD2
- strh r7, [r5, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- strh r0, [r4, 0xA]
- strh r7, [r4, 0xC]
-_08087FD2:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8087ED8
-
- thumb_func_start sub_8087FDC
-sub_8087FDC: @ 8087FDC
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _08088058 @ =gUnknown_0839F380
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r0, _0808805C @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08088060 @ =gMapObjects
- adds r5, r0, r1
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _08088050
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r1, [r0]
- adds r0, r5, 0
- bl FieldObjectTurn
- movs r0, 0x8
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _08088050
- movs r0, 0x24
- ldrsh r1, [r4, r0]
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- cmp r1, r0
- bne _08088050
- bl ScriptContext2_Disable
- bl CameraObjectReset1
- bl UnfreezeMapObjects
- ldr r0, _08088064 @ =sub_8087E1C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08088050:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08088058: .4byte gUnknown_0839F380
-_0808805C: .4byte gPlayerAvatar
-_08088060: .4byte gMapObjects
-_08088064: .4byte sub_8087E1C
- thumb_func_end sub_8087FDC
-
- thumb_func_start FldEff_FieldMoveShowMon
-FldEff_FieldMoveShowMon: @ 8088068
- push {r4,lr}
- bl sav1_map_get_light_level
- lsls r0, 24
- lsrs r0, 24
- bl is_light_level_1_2_3_5_or_6
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08088088
- ldr r0, _08088084 @ =sub_8088120
- b _0808808A
- .align 2, 0
-_08088084: .4byte sub_8088120
-_08088088:
- ldr r0, _080880B8 @ =sub_808847C
-_0808808A:
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r2, _080880BC @ =gUnknown_0202FF84
- ldr r0, [r2]
- ldr r1, [r2, 0x4]
- ldr r2, [r2, 0x8]
- bl sub_8088830
- ldr r2, _080880C0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x26]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080880B8: .4byte sub_808847C
-_080880BC: .4byte gUnknown_0202FF84
-_080880C0: .4byte gTasks
- thumb_func_end FldEff_FieldMoveShowMon
-
- thumb_func_start FldEff_FieldMoveShowMonInit
-FldEff_FieldMoveShowMonInit: @ 80880C4
- push {r4-r6,lr}
- ldr r5, _08088118 @ =gUnknown_0202FF84
- ldr r0, [r5]
- movs r6, 0x80
- lsls r6, 24
- ands r6, r0
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- adds r4, r0, 0
- muls r4, r1
- ldr r0, _0808811C @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- str r0, [r5]
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- str r0, [r5, 0x4]
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- str r0, [r5, 0x8]
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- movs r0, 0x6
- bl FieldEffectStart
- movs r0, 0x3B
- bl FieldEffectActiveListRemove
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08088118: .4byte gUnknown_0202FF84
-_0808811C: .4byte gPlayerParty
- thumb_func_end FldEff_FieldMoveShowMonInit
-
- thumb_func_start sub_8088120
-sub_8088120: @ 8088120
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08088148 @ =gUnknown_0839F3AC
- ldr r2, _0808814C @ =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_08088148: .4byte gUnknown_0839F3AC
-_0808814C: .4byte gTasks
- thumb_func_end sub_8088120
-
- thumb_func_start sub_8088150
-sub_8088150: @ 8088150
- push {r4-r6,lr}
- adds r4, r0, 0
- ldr r6, _080881A0 @ =REG_WININ
- ldrh r0, [r6]
- strh r0, [r4, 0x1E]
- ldr r5, _080881A4 @ =REG_WINOUT
- ldrh r0, [r5]
- strh r0, [r4, 0x20]
- adds r0, r4, 0
- adds r0, 0x22
- ldr r1, _080881A8 @ =gMain
- ldr r1, [r1, 0xC]
- bl StoreWordInTwoHalfwords
- ldr r1, _080881AC @ =0x0000f0f1
- strh r1, [r4, 0xA]
- ldr r0, _080881B0 @ =0x00005051
- strh r0, [r4, 0xC]
- movs r0, 0x3F
- strh r0, [r4, 0xE]
- movs r0, 0x3E
- strh r0, [r4, 0x10]
- ldr r0, _080881B4 @ =REG_WIN0H
- strh r1, [r0]
- ldr r1, _080881B8 @ =REG_WIN0V
- ldrh r0, [r4, 0xC]
- strh r0, [r1]
- ldrh r0, [r4, 0xE]
- strh r0, [r6]
- ldrh r0, [r4, 0x10]
- strh r0, [r5]
- ldr r0, _080881BC @ =sub_80883DC
- bl SetVBlankCallback
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080881A0: .4byte REG_WININ
-_080881A4: .4byte REG_WINOUT
-_080881A8: .4byte gMain
-_080881AC: .4byte 0x0000f0f1
-_080881B0: .4byte 0x00005051
-_080881B4: .4byte REG_WIN0H
-_080881B8: .4byte REG_WIN0V
-_080881BC: .4byte sub_80883DC
- thumb_func_end sub_8088150
-
- thumb_func_start sub_80881C0
-sub_80881C0: @ 80881C0
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- ldr r0, _08088218 @ =REG_BG0CNT
- ldrh r1, [r0]
- lsrs r1, 2
- lsls r1, 30
- lsrs r1, 16
- ldrh r4, [r0]
- lsrs r4, 8
- lsls r4, 27
- lsrs r4, 16
- ldr r0, _0808821C @ =gFieldMoveStreaksTiles
- movs r5, 0xC0
- lsls r5, 19
- adds r1, r5
- movs r2, 0x80
- lsls r2, 1
- bl CpuSet
- movs r0, 0
- str r0, [sp]
- adds r5, r4, r5
- ldr r2, _08088220 @ =0x05000200
- mov r0, sp
- adds r1, r5, 0
- bl CpuSet
- ldr r0, _08088224 @ =gFieldMoveStreaksPalette
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- adds r0, r4, 0
- bl sub_808843C
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08088218: .4byte REG_BG0CNT
-_0808821C: .4byte gFieldMoveStreaksTiles
-_08088220: .4byte 0x05000200
-_08088224: .4byte gFieldMoveStreaksPalette
- thumb_func_end sub_80881C0
-
- thumb_func_start sub_8088228
-sub_8088228: @ 8088228
- push {r4-r7,lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x12]
- subs r0, 0x10
- strh r0, [r3, 0x12]
- ldrh r6, [r3, 0xA]
- ldrh r2, [r3, 0xC]
- movs r7, 0xFF
- lsrs r1, r6, 8
- subs r1, 0x10
- lsls r1, 16
- lsrs r0, r2, 8
- subs r0, 0x2
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r7, 0
- ands r0, r2
- adds r5, r0, 0x2
- lsrs r2, r1, 16
- cmp r1, 0
- bge _08088254
- movs r2, 0
-_08088254:
- lsls r0, r4, 16
- asrs r0, 16
- cmp r0, 0x27
- bgt _0808825E
- movs r4, 0x28
-_0808825E:
- cmp r5, 0x78
- ble _08088264
- movs r5, 0x78
-_08088264:
- lsls r2, 16
- asrs r2, 16
- lsls r1, r2, 8
- adds r0, r7, 0
- ands r0, r6
- orrs r1, r0
- strh r1, [r3, 0xA]
- lsls r0, r4, 16
- asrs r4, r0, 16
- lsls r0, r4, 8
- adds r1, r5, 0
- orrs r0, r1
- strh r0, [r3, 0xC]
- cmp r2, 0
- bne _080882A4
- cmp r4, 0x28
- bne _080882A4
- cmp r1, 0x78
- bne _080882A4
- ldr r2, _080882AC @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _080882B0 @ =sub_8088890
- str r1, [r0]
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_080882A4:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080882AC: .4byte gSprites
-_080882B0: .4byte sub_8088890
- thumb_func_end sub_8088228
-
- thumb_func_start sub_80882B4
-sub_80882B4: @ 80882B4
- push {lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x12]
- subs r0, 0x10
- strh r0, [r3, 0x12]
- ldr r2, _080882E0 @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3C
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _080882DA
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_080882DA:
- pop {r0}
- bx r0
- .align 2, 0
-_080882E0: .4byte gSprites
- thumb_func_end sub_80882B4
-
- thumb_func_start sub_80882E4
-sub_80882E4: @ 80882E4
- push {r4,lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x12]
- subs r0, 0x10
- strh r0, [r3, 0x12]
- ldrh r2, [r3, 0xC]
- lsls r1, r2, 16
- movs r0, 0xFF
- asrs r1, 24
- adds r1, 0x6
- lsls r1, 16
- ands r0, r2
- subs r0, 0x6
- lsls r0, 16
- lsrs r2, r0, 16
- lsrs r4, r1, 16
- asrs r1, 16
- cmp r1, 0x50
- ble _0808830C
- movs r4, 0x50
-_0808830C:
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x50
- bgt _08088316
- movs r2, 0x51
-_08088316:
- lsls r0, r4, 16
- asrs r0, 16
- lsls r1, r0, 8
- lsls r2, 16
- asrs r2, 16
- orrs r1, r2
- strh r1, [r3, 0xC]
- cmp r0, 0x50
- bne _08088332
- cmp r2, 0x51
- bne _08088332
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_08088332:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80882E4
-
- thumb_func_start sub_8088338
-sub_8088338: @ 8088338
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r0, _08088378 @ =REG_BG0CNT
- ldrh r1, [r0]
- lsrs r1, 8
- lsls r1, 27
- lsrs r1, 16
- movs r0, 0
- str r0, [sp]
- movs r0, 0xC0
- lsls r0, 19
- adds r1, r0
- ldr r2, _0808837C @ =0x05000200
- mov r0, sp
- bl CpuSet
- movs r0, 0xF1
- strh r0, [r4, 0xA]
- movs r0, 0xA1
- strh r0, [r4, 0xC]
- ldrh r0, [r4, 0x1E]
- strh r0, [r4, 0xE]
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x10]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08088378: .4byte REG_BG0CNT
-_0808837C: .4byte 0x05000200
- thumb_func_end sub_8088338
-
- thumb_func_start sub_8088380
-sub_8088380: @ 8088380
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- adds r0, 0x22
- mov r1, sp
- bl LoadWordFromTwoHalfwords
- ldr r0, [sp]
- bl SetVBlankCallback
- ldr r4, _080883D0 @ =gWindowConfig_81E6CE4
- adds r0, r4, 0
- bl SetUpWindowConfig
- adds r0, r4, 0
- bl InitMenuWindow
- movs r0, 0x26
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080883D4 @ =gSprites
- adds r0, r1
- bl FreeResourcesAndDestroySprite
- movs r0, 0x6
- bl FieldEffectActiveListRemove
- ldr r0, _080883D8 @ =sub_8088120
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080883D0: .4byte gWindowConfig_81E6CE4
-_080883D4: .4byte gSprites
-_080883D8: .4byte sub_8088120
- thumb_func_end sub_8088380
-
- thumb_func_start sub_80883DC
-sub_80883DC: @ 80883DC
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _08088430 @ =sub_8088120
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, _08088434 @ =gTasks
- adds r4, r0
- adds r0, r4, 0
- adds r0, 0x22
- mov r1, sp
- bl LoadWordFromTwoHalfwords
- ldr r0, [sp]
- bl _call_via_r0
- ldr r1, _08088438 @ =REG_WIN0H
- ldrh r0, [r4, 0xA]
- strh r0, [r1]
- adds r1, 0x4
- ldrh r0, [r4, 0xC]
- strh r0, [r1]
- adds r1, 0x4
- ldrh r0, [r4, 0xE]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r4, 0x10]
- strh r0, [r1]
- subs r1, 0x3A
- ldrh r0, [r4, 0x12]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r4, 0x14]
- strh r0, [r1]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08088430: .4byte sub_8088120
-_08088434: .4byte gTasks
-_08088438: .4byte REG_WIN0H
- thumb_func_end sub_80883DC
-
- thumb_func_start sub_808843C
-sub_808843C: @ 808843C
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _08088470 @ =0x06000140
- adds r2, r0, r1
- movs r1, 0
- ldr r5, _08088474 @ =gFieldMoveStreaksTilemap
- movs r0, 0xF0
- lsls r0, 8
- adds r4, r0, 0
- ldr r3, _08088478 @ =0x0000013f
-_08088452:
- lsls r0, r1, 1
- adds r0, r5
- ldrh r0, [r0]
- orrs r0, r4
- strh r0, [r2]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- adds r2, 0x2
- cmp r1, r3
- bls _08088452
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08088470: .4byte 0x06000140
-_08088474: .4byte gFieldMoveStreaksTilemap
-_08088478: .4byte 0x0000013f
- thumb_func_end sub_808843C
-
- thumb_func_start sub_808847C
-sub_808847C: @ 808847C
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _080884A4 @ =gUnknown_0839F3C8
- ldr r2, _080884A8 @ =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_080884A4: .4byte gUnknown_0839F3C8
-_080884A8: .4byte gTasks
- thumb_func_end sub_808847C
-
- thumb_func_start sub_80884AC
-sub_80884AC: @ 80884AC
- push {r4,lr}
- adds r4, r0, 0
- ldr r1, _080884DC @ =REG_BG0HOFS
- ldrh r0, [r4, 0xA]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r4, 0xC]
- strh r0, [r1]
- adds r0, r4, 0
- adds r0, 0x22
- ldr r1, _080884E0 @ =gMain
- ldr r1, [r1, 0xC]
- bl StoreWordInTwoHalfwords
- ldr r0, _080884E4 @ =sub_80886B0
- bl SetVBlankCallback
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080884DC: .4byte REG_BG0HOFS
-_080884E0: .4byte gMain
-_080884E4: .4byte sub_80886B0
- thumb_func_end sub_80884AC
-
- thumb_func_start sub_80884E8
-sub_80884E8: @ 80884E8
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x4
- adds r6, r0, 0
- ldr r0, _08088544 @ =REG_BG0CNT
- ldrh r1, [r0]
- lsrs r1, 2
- lsls r1, 30
- lsrs r1, 16
- ldrh r4, [r0]
- lsrs r4, 8
- lsls r4, 27
- lsrs r4, 16
- movs r0, 0
- mov r8, r0
- strh r4, [r6, 0x20]
- ldr r0, _08088548 @ =gDarknessFieldMoveStreaksTiles
- movs r5, 0xC0
- lsls r5, 19
- adds r1, r5
- movs r2, 0x40
- bl CpuSet
- mov r0, r8
- str r0, [sp]
- adds r4, r5
- ldr r2, _0808854C @ =0x05000200
- mov r0, sp
- adds r1, r4, 0
- bl CpuSet
- ldr r0, _08088550 @ =gDarknessFieldMoveStreaksPalette
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08088544: .4byte REG_BG0CNT
-_08088548: .4byte gDarknessFieldMoveStreaksTiles
-_0808854C: .4byte 0x05000200
-_08088550: .4byte gDarknessFieldMoveStreaksPalette
- thumb_func_end sub_80884E8
-
- thumb_func_start sub_8088554
-sub_8088554: @ 8088554
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8088708
- lsls r0, 24
- cmp r0, 0
- beq _0808858A
- ldr r1, _08088598 @ =REG_WIN1H
- movs r0, 0xF0
- strh r0, [r1]
- adds r1, 0x4
- ldr r2, _0808859C @ =0x00002878
- adds r0, r2, 0
- strh r0, [r1]
- ldr r2, _080885A0 @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _080885A4 @ =sub_8088890
- str r1, [r0]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0808858A:
- adds r0, r4, 0
- bl sub_80886F8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08088598: .4byte REG_WIN1H
-_0808859C: .4byte 0x00002878
-_080885A0: .4byte gSprites
-_080885A4: .4byte sub_8088890
- thumb_func_end sub_8088554
-
- thumb_func_start sub_80885A8
-sub_80885A8: @ 80885A8
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80886F8
- ldr r2, _080885D4 @ =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3C
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _080885CC
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080885CC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080885D4: .4byte gSprites
- thumb_func_end sub_80885A8
-
- thumb_func_start sub_80885D8
-sub_80885D8: @ 80885D8
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80886F8
- ldrh r1, [r4, 0xA]
- movs r0, 0x7
- ands r0, r1
- movs r1, 0
- strh r0, [r4, 0xE]
- strh r1, [r4, 0x10]
- ldr r0, _08088604 @ =REG_WIN1H
- ldr r2, _08088608 @ =0x0000ffff
- adds r1, r2, 0
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08088604: .4byte REG_WIN1H
-_08088608: .4byte 0x0000ffff
- thumb_func_end sub_80885D8
-
- thumb_func_start sub_808860C
-sub_808860C: @ 808860C
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80886F8
- adds r0, r4, 0
- bl sub_80887C0
- lsls r0, 24
- cmp r0, 0
- beq _08088626
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08088626:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_808860C
-
- thumb_func_start sub_808862C
-sub_808862C: @ 808862C
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- ldr r0, _0808869C @ =REG_BG0CNT
- ldrh r1, [r0]
- lsrs r1, 8
- lsls r1, 27
- lsrs r1, 16
- movs r0, 0
- str r0, [sp]
- movs r0, 0xC0
- lsls r0, 19
- adds r1, r0
- ldr r2, _080886A0 @ =0x05000200
- mov r0, sp
- bl CpuSet
- adds r0, r5, 0
- adds r0, 0x22
- add r1, sp, 0x4
- bl LoadWordFromTwoHalfwords
- ldr r0, [sp, 0x4]
- bl SetVBlankCallback
- ldr r4, _080886A4 @ =gWindowConfig_81E6CE4
- adds r0, r4, 0
- bl SetUpWindowConfig
- adds r0, r4, 0
- bl InitMenuWindow
- movs r0, 0x26
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080886A8 @ =gSprites
- adds r0, r1
- bl FreeResourcesAndDestroySprite
- movs r0, 0x6
- bl FieldEffectActiveListRemove
- ldr r0, _080886AC @ =sub_808847C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808869C: .4byte REG_BG0CNT
-_080886A0: .4byte 0x05000200
-_080886A4: .4byte gWindowConfig_81E6CE4
-_080886A8: .4byte gSprites
-_080886AC: .4byte sub_808847C
- thumb_func_end sub_808862C
-
- thumb_func_start sub_80886B0
-sub_80886B0: @ 80886B0
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _080886EC @ =sub_808847C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, _080886F0 @ =gTasks
- adds r4, r0
- adds r0, r4, 0
- adds r0, 0x22
- mov r1, sp
- bl LoadWordFromTwoHalfwords
- ldr r0, [sp]
- bl _call_via_r0
- ldr r1, _080886F4 @ =REG_BG0HOFS
- ldrh r0, [r4, 0xA]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r4, 0xC]
- strh r0, [r1]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080886EC: .4byte sub_808847C
-_080886F0: .4byte gTasks
-_080886F4: .4byte REG_BG0HOFS
- thumb_func_end sub_80886B0
-
- thumb_func_start sub_80886F8
-sub_80886F8: @ 80886F8
- ldrh r1, [r0, 0xA]
- subs r1, 0x10
- strh r1, [r0, 0xA]
- ldrh r1, [r0, 0xE]
- adds r1, 0x10
- strh r1, [r0, 0xE]
- bx lr
- thumb_func_end sub_80886F8
-
- thumb_func_start sub_8088708
-sub_8088708: @ 8088708
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r2, [r5, 0x10]
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- cmp r0, 0x1F
- ble _08088724
- movs r0, 0x1
- b _080887A8
-_08088724:
- ldrh r0, [r5, 0xE]
- lsls r0, 16
- asrs r3, r0, 19
- movs r1, 0x1F
- ands r3, r1
- movs r4, 0x10
- ldrsh r0, [r5, r4]
- cmp r3, r0
- blt _080887A6
- movs r0, 0x20
- subs r3, r0, r3
- ands r3, r1
- subs r0, r2
- mov r12, r0
- mov r7, r12
- ands r7, r1
- mov r12, r7
- ldrh r0, [r5, 0x20]
- ldr r1, _080887B8 @ =0x06000140
- adds r1, r0
- mov r8, r1
- movs r4, 0
- ldr r7, _080887BC @ =gDarknessFieldMoveStreaksTilemap
- mov r10, r7
- movs r0, 0xF0
- lsls r0, 8
- mov r9, r0
- adds r1, r3, 0x1
- movs r0, 0x1F
- ands r1, r0
- str r1, [sp]
- mov r6, r12
- adds r6, 0x1
- ands r6, r0
-_08088768:
- lsls r1, r4, 5
- adds r2, r1, r3
- lsls r2, 1
- add r2, r8
- mov r7, r12
- adds r0, r7, r1
- lsls r0, 1
- add r0, r10
- ldrh r0, [r0]
- mov r7, r9
- orrs r0, r7
- strh r0, [r2]
- ldr r0, [sp]
- adds r2, r1, r0
- lsls r2, 1
- add r2, r8
- adds r1, r6, r1
- lsls r1, 1
- add r1, r10
- ldrh r0, [r1]
- mov r1, r9
- orrs r0, r1
- strh r0, [r2]
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x9
- bls _08088768
- ldrh r0, [r5, 0x10]
- adds r0, 0x2
- strh r0, [r5, 0x10]
-_080887A6:
- movs r0, 0
-_080887A8:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080887B8: .4byte 0x06000140
-_080887BC: .4byte gDarknessFieldMoveStreaksTilemap
- thumb_func_end sub_8088708
-
- thumb_func_start sub_80887C0
-sub_80887C0: @ 80887C0
- push {r4-r7,lr}
- adds r5, r0, 0
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- cmp r0, 0x1F
- ble _080887D0
- movs r0, 0x1
- b _08088824
-_080887D0:
- ldrh r0, [r5, 0xE]
- lsls r0, 16
- asrs r0, 19
- lsls r0, 16
- lsrs r2, r0, 16
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- cmp r2, r0
- blt _08088822
- ldrh r0, [r5, 0xA]
- lsls r0, 16
- asrs r2, r0, 19
- movs r0, 0x1F
- ands r2, r0
- ldrh r0, [r5, 0x20]
- ldr r1, _0808882C @ =0x06000140
- adds r6, r0, r1
- movs r3, 0
- movs r0, 0xF0
- lsls r0, 8
- adds r7, r0, 0
- adds r4, r2, 0x1
- movs r0, 0x1F
- ands r4, r0
-_08088800:
- lsls r0, r3, 5
- adds r1, r0, r2
- lsls r1, 1
- adds r1, r6
- strh r7, [r1]
- adds r0, r4
- lsls r0, 1
- adds r0, r6
- strh r7, [r0]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x9
- bls _08088800
- ldrh r0, [r5, 0x10]
- adds r0, 0x2
- strh r0, [r5, 0x10]
-_08088822:
- movs r0, 0
-_08088824:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0808882C: .4byte 0x06000140
- thumb_func_end sub_80887C0
-
- thumb_func_start sub_8088830
-sub_8088830: @ 8088830
- push {r4-r6,lr}
- sub sp, 0x8
- adds r6, r0, 0
- movs r5, 0x80
- lsls r5, 24
- ands r5, r6
- lsrs r5, 16
- lsls r5, 16
- lsrs r5, 16
- ldr r0, _08088884 @ =0x7fffffff
- ands r6, r0
- lsls r0, r6, 16
- lsrs r0, 16
- movs r3, 0xA0
- lsls r3, 1
- movs r4, 0x50
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- bl CreateMonSprite_FieldMove
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r1, _08088888 @ =gSprites
- adds r2, r1
- ldr r1, _0808888C @ =SpriteCallbackDummy
- str r1, [r2, 0x1C]
- ldrb r3, [r2, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- strb r1, [r2, 0x5]
- strh r6, [r2, 0x2E]
- strh r5, [r2, 0x3A]
- add sp, 0x8
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08088884: .4byte 0x7fffffff
-_08088888: .4byte gSprites
-_0808888C: .4byte SpriteCallbackDummy
- thumb_func_end sub_8088830
-
- thumb_func_start sub_8088890
-sub_8088890: @ 8088890
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x20]
- subs r0, 0x14
- strh r0, [r1, 0x20]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x78
- bgt _080888D0
- movs r0, 0x78
- strh r0, [r1, 0x20]
- movs r0, 0x1E
- strh r0, [r1, 0x30]
- ldr r0, _080888C4 @ =sub_80888D4
- str r0, [r1, 0x1C]
- movs r2, 0x3A
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _080888C8
- ldrh r0, [r1, 0x2E]
- movs r1, 0
- movs r2, 0x7D
- movs r3, 0xA
- bl PlayCry2
- b _080888D0
- .align 2, 0
-_080888C4: .4byte sub_80888D4
-_080888C8:
- ldrh r0, [r1, 0x2E]
- movs r1, 0
- bl PlayCry1
-_080888D0:
- pop {r0}
- bx r0
- thumb_func_end sub_8088890
-
- thumb_func_start sub_80888D4
-sub_80888D4: @ 80888D4
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- subs r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080888E8
- ldr r0, _080888EC @ =sub_80888F0
- str r0, [r1, 0x1C]
-_080888E8:
- pop {r0}
- bx r0
- .align 2, 0
-_080888EC: .4byte sub_80888F0
- thumb_func_end sub_80888D4
-
- thumb_func_start sub_80888F0
-sub_80888F0: @ 80888F0
- push {lr}
- adds r2, r0, 0
- ldrh r3, [r2, 0x20]
- movs r0, 0x20
- ldrsh r1, [r2, r0]
- movs r0, 0x40
- negs r0, r0
- cmp r1, r0
- bge _08088908
- movs r0, 0x1
- strh r0, [r2, 0x3C]
- b _0808890E
-_08088908:
- adds r0, r3, 0
- subs r0, 0x14
- strh r0, [r2, 0x20]
-_0808890E:
- pop {r0}
- bx r0
- thumb_func_end sub_80888F0
-
- thumb_func_start FldEff_UseSurf
-FldEff_UseSurf: @ 8088914
- push {lr}
- ldr r0, _08088944 @ =sub_8088954
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08088948 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _0808894C @ =gUnknown_0202FF84
- ldr r0, [r0]
- strh r0, [r1, 0x26]
- bl sav1_reset_battle_music_maybe
- ldr r0, _08088950 @ =0x0000016d
- bl sub_8053FB0
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08088944: .4byte sub_8088954
-_08088948: .4byte gTasks
-_0808894C: .4byte gUnknown_0202FF84
-_08088950: .4byte 0x0000016d
- thumb_func_end FldEff_UseSurf
-
- thumb_func_start sub_8088954
-sub_8088954: @ 8088954
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _0808897C @ =gUnknown_0839F3E4
- ldr r2, _08088980 @ =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_0808897C: .4byte gUnknown_0839F3E4
-_08088980: .4byte gTasks
- thumb_func_end sub_8088954
-
- thumb_func_start sub_8088984
-sub_8088984: @ 8088984
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r5, _080889DC @ =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r5, 0x6]
- movs r0, 0x8
- bl SetPlayerAvatarStateMask
- adds r6, r4, 0
- adds r6, 0xA
- movs r0, 0xC
- adds r0, r4
- mov r8, r0
- adds r0, r6, 0
- mov r1, r8
- bl PlayerGetDestCoords
- ldr r2, _080889E0 @ =gMapObjects
- ldrb r1, [r5, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x18]
- lsrs r0, 4
- adds r1, r6, 0
- mov r2, r8
- bl MoveCoords
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080889DC: .4byte gPlayerAvatar
-_080889E0: .4byte gMapObjects
- thumb_func_end sub_8088984
-
- thumb_func_start sub_80889E4
-sub_80889E4: @ 80889E4
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08088A28 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08088A2C @ =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _08088A0E
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _08088A20
-_08088A0E:
- bl sub_8059BF4
- adds r0, r4, 0
- movs r1, 0x39
- bl FieldObjectSetSpecialAnim
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
-_08088A20:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08088A28: .4byte gPlayerAvatar
-_08088A2C: .4byte gMapObjects
- thumb_func_end sub_80889E4
-
- thumb_func_start sub_8088A30
-sub_8088A30: @ 8088A30
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _08088A6C @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08088A70 @ =gMapObjects
- adds r0, r1
- bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
- lsls r0, 24
- cmp r0, 0
- beq _08088A66
- ldr r2, _08088A74 @ =gUnknown_0202FF84
- movs r1, 0x26
- ldrsh r0, [r4, r1]
- movs r1, 0x80
- lsls r1, 24
- orrs r0, r1
- str r0, [r2]
- movs r0, 0x3B
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08088A66:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08088A6C: .4byte gPlayerAvatar
-_08088A70: .4byte gMapObjects
-_08088A74: .4byte gUnknown_0202FF84
- thumb_func_end sub_8088A30
-
- thumb_func_start sub_8088A78
-sub_8088A78: @ 8088A78
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r0, 0x6
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08088AE2
- ldr r5, _08088AE8 @ =gPlayerAvatar
- ldrb r0, [r5, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _08088AEC @ =gMapObjects
- adds r4, r0
- movs r0, 0x3
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_805B980
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- ldrb r0, [r4, 0x18]
- lsrs r0, 4
- bl sub_80608D0
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- ldr r1, _08088AF0 @ =gUnknown_0202FF84
- movs r2, 0xA
- ldrsh r0, [r6, r2]
- str r0, [r1]
- movs r2, 0xC
- ldrsh r0, [r6, r2]
- str r0, [r1, 0x4]
- ldrb r0, [r5, 0x5]
- str r0, [r1, 0x8]
- movs r0, 0x8
- bl FieldEffectStart
- strb r0, [r4, 0x1A]
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_08088AE2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08088AE8: .4byte gPlayerAvatar
-_08088AEC: .4byte gMapObjects
-_08088AF0: .4byte gUnknown_0202FF84
- thumb_func_end sub_8088A78
-
- thumb_func_start sub_8088AF4
-sub_8088AF4: @ 8088AF4
- push {r4,r5,lr}
- ldr r5, _08088B5C @ =gPlayerAvatar
- ldrb r1, [r5, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08088B60 @ =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _08088B54
- movs r0, 0
- strb r0, [r5, 0x6]
- ldrb r1, [r5]
- movs r0, 0xDF
- ands r0, r1
- strb r0, [r5]
- ldrb r0, [r4, 0x18]
- lsrs r0, 4
- bl GetFaceDirectionAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- ldrb r0, [r4, 0x1A]
- movs r1, 0x1
- bl sub_8127ED0
- bl UnfreezeMapObjects
- bl ScriptContext2_Disable
- movs r0, 0x9
- bl FieldEffectActiveListRemove
- ldr r0, _08088B64 @ =sub_8088954
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08088B54:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08088B5C: .4byte gPlayerAvatar
-_08088B60: .4byte gMapObjects
-_08088B64: .4byte sub_8088954
- thumb_func_end sub_8088AF4
-
- thumb_func_start FldEff_NPCFlyOut
-FldEff_NPCFlyOut: @ 8088B68
- push {r4,lr}
- ldr r0, _08088BB4 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x68]
- movs r1, 0x78
- movs r2, 0
- movs r3, 0x1
- bl CreateSprite
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r2, r4, 4
- adds r2, r4
- lsls r2, 2
- ldr r0, _08088BB8 @ =gSprites
- adds r2, r0
- ldrb r1, [r2, 0x5]
- movs r0, 0xF
- ands r0, r1
- movs r1, 0xD
- negs r1, r1
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, _08088BBC @ =sub_8088BC4
- str r0, [r2, 0x1C]
- ldr r0, _08088BC0 @ =gUnknown_0202FF84
- ldr r0, [r0]
- strh r0, [r2, 0x30]
- movs r0, 0x9E
- bl PlaySE
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08088BB4: .4byte gFieldEffectObjectTemplatePointers
-_08088BB8: .4byte gSprites
-_08088BBC: .4byte sub_8088BC4
-_08088BC0: .4byte gUnknown_0202FF84
- thumb_func_end FldEff_NPCFlyOut
-
- thumb_func_start sub_8088BC4
-sub_8088BC4: @ 8088BC4
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- movs r1, 0x8C
- bl Cos
- movs r5, 0
- strh r0, [r4, 0x24]
- movs r2, 0x32
- ldrsh r0, [r4, r2]
- movs r1, 0x48
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x32]
- adds r0, 0x4
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x32]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _08088C26
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08088C3C @ =gSprites
- adds r1, r0
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- ldrh r0, [r4, 0x24]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r1, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- subs r0, 0x8
- strh r0, [r1, 0x22]
- strh r5, [r1, 0x24]
- strh r5, [r1, 0x26]
-_08088C26:
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0x7F
- ble _08088C36
- adds r0, r4, 0
- movs r1, 0x1E
- bl FieldEffectStop
-_08088C36:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08088C3C: .4byte gSprites
- thumb_func_end sub_8088BC4
-
- thumb_func_start FldEff_UseFly
-FldEff_UseFly: @ 8088C40
- push {lr}
- ldr r0, _08088C64 @ =sub_8088C70
- movs r1, 0xFE
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08088C68 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _08088C6C @ =gUnknown_0202FF84
- ldr r0, [r0]
- strh r0, [r1, 0xA]
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08088C64: .4byte sub_8088C70
-_08088C68: .4byte gTasks
-_08088C6C: .4byte gUnknown_0202FF84
- thumb_func_end FldEff_UseFly
-
- thumb_func_start sub_8088C70
-sub_8088C70: @ 8088C70
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08088C98 @ =gUnknown_0839F3F8
- ldr r2, _08088C9C @ =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_08088C98: .4byte gUnknown_0839F3F8
-_08088C9C: .4byte gTasks
- thumb_func_end sub_8088C70
-
- thumb_func_start sub_8088CA0
-sub_8088CA0: @ 8088CA0
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, _08088CF0 @ =gPlayerAvatar
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08088CF4 @ =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _08088CCA
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _08088CE8
-_08088CCA:
- ldrb r0, [r6]
- strh r0, [r5, 0x26]
- movs r0, 0x1
- strb r0, [r6, 0x6]
- bl SetPlayerAvatarStateMask
- bl sub_8059BF4
- adds r0, r4, 0
- movs r1, 0x39
- bl FieldObjectSetSpecialAnim
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
-_08088CE8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08088CF0: .4byte gPlayerAvatar
-_08088CF4: .4byte gMapObjects
- thumb_func_end sub_8088CA0
-
- thumb_func_start sub_8088CF8
-sub_8088CF8: @ 8088CF8
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _08088D30 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08088D34 @ =gMapObjects
- adds r0, r1
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _08088D28
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- ldr r1, _08088D38 @ =gUnknown_0202FF84
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- str r0, [r1]
- movs r0, 0x3B
- bl FieldEffectStart
-_08088D28:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08088D30: .4byte gPlayerAvatar
-_08088D34: .4byte gMapObjects
-_08088D38: .4byte gUnknown_0202FF84
- thumb_func_end sub_8088CF8
-
- thumb_func_start sub_8088D3C
-sub_8088D3C: @ 8088D3C
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0x6
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08088D84
- ldr r0, _08088D8C @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08088D90 @ =gMapObjects
- adds r5, r0, r1
- ldrh r1, [r4, 0x26]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08088D74
- ldrb r0, [r5, 0x1A]
- movs r1, 0x2
- bl sub_8127ED0
- ldrb r0, [r5, 0x1A]
- movs r1, 0
- bl sub_8127EFC
-_08088D74:
- bl sub_8088F60
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08088D84:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08088D8C: .4byte gPlayerAvatar
-_08088D90: .4byte gMapObjects
- thumb_func_end sub_8088D3C
-
- thumb_func_start sub_8088D94
-sub_8088D94: @ 8088D94
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0xA]
- bl sub_8088FA4
- lsls r0, 24
- cmp r0, 0
- beq _08088DC8
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x10
- strh r0, [r4, 0xC]
- movs r0, 0x1
- bl SetPlayerAvatarTransitionFlags
- ldr r0, _08088DD0 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08088DD4 @ =gMapObjects
- adds r0, r1
- movs r1, 0x2
- bl FieldObjectSetSpecialAnim
-_08088DC8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08088DD0: .4byte gPlayerAvatar
-_08088DD4: .4byte gMapObjects
- thumb_func_end sub_8088D94
-
- thumb_func_start sub_8088DD8
-sub_8088DD8: @ 8088DD8
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _08088E24 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08088E28 @ =gMapObjects
- adds r2, r0, r1
- ldrh r1, [r4, 0xC]
- movs r3, 0xC
- ldrsh r0, [r4, r3]
- cmp r0, 0
- beq _08088DFE
- subs r0, r1, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _08088E1C
-_08088DFE:
- adds r0, r2, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _08088E1C
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x9E
- bl PlaySE
- ldrb r0, [r4, 0xA]
- bl sub_8088FC0
-_08088E1C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08088E24: .4byte gPlayerAvatar
-_08088E28: .4byte gMapObjects
- thumb_func_end sub_8088DD8
-
- thumb_func_start sub_8088E2C
-sub_8088E2C: @ 8088E2C
- push {r4-r6,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _08088EA2
- ldr r0, _08088EA8 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08088EAC @ =gMapObjects
- adds r4, r0, r1
- movs r0, 0x3
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_805B980
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r6, _08088EB0 @ =gSprites
- adds r0, r6
- movs r1, 0x16
- bl StartSpriteAnim
- ldrb r0, [r4, 0x1]
- movs r1, 0x10
- orrs r0, r1
- strb r0, [r4, 0x1]
- adds r0, r4, 0
- movs r1, 0x48
- bl FieldObjectSetSpecialAnim
- ldrh r1, [r5, 0x26]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08088E98
- ldrb r1, [r4, 0x1A]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
-_08088E98:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- strh r0, [r5, 0xC]
-_08088EA2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08088EA8: .4byte gPlayerAvatar
-_08088EAC: .4byte gMapObjects
-_08088EB0: .4byte gSprites
- thumb_func_end sub_8088E2C
-
- thumb_func_start sub_8088EB4
-sub_8088EB4: @ 8088EB4
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x9
- ble _08088F00
- ldr r0, _08088F08 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _08088F0C @ =gMapObjects
- adds r4, r0
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimActive
- ldrb r1, [r4, 0x1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
- ldrb r1, [r4, 0x2]
- movs r0, 0x41
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x2]
- ldrb r0, [r5, 0xA]
- ldrb r1, [r4, 0x4]
- bl sub_8088FFC
- bl CameraObjectReset2
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
-_08088F00:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08088F08: .4byte gPlayerAvatar
-_08088F0C: .4byte gMapObjects
- thumb_func_end sub_8088EB4
-
- thumb_func_start sub_8088F10
-sub_8088F10: @ 8088F10
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0xA]
- bl sub_8088FA4
- lsls r0, 24
- cmp r0, 0
- beq _08088F2A
- bl fade_8080918
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08088F2A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8088F10
-
- thumb_func_start sub_8088F30
-sub_8088F30: @ 8088F30
- push {lr}
- ldr r0, _08088F58 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08088F52
- movs r0, 0x1F
- bl FieldEffectActiveListRemove
- ldr r0, _08088F5C @ =sub_8088C70
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08088F52:
- pop {r0}
- bx r0
- .align 2, 0
-_08088F58: .4byte gPaletteFade
-_08088F5C: .4byte sub_8088C70
- thumb_func_end sub_8088F30
-
- thumb_func_start sub_8088F60
-sub_8088F60: @ 8088F60
- push {lr}
- ldr r0, _08088F98 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x68]
- movs r1, 0xFF
- movs r2, 0xB4
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r1, _08088F9C @ =gSprites
- adds r2, r1
- ldrb r3, [r2, 0x5]
- movs r1, 0xF
- ands r1, r3
- movs r3, 0xD
- negs r3, r3
- ands r1, r3
- movs r3, 0x4
- orrs r1, r3
- strb r1, [r2, 0x5]
- ldr r1, _08088FA0 @ =sub_8089018
- str r1, [r2, 0x1C]
- pop {r1}
- bx r1
- .align 2, 0
-_08088F98: .4byte gFieldEffectObjectTemplatePointers
-_08088F9C: .4byte gSprites
-_08088FA0: .4byte sub_8089018
- thumb_func_end sub_8088F60
-
- thumb_func_start sub_8088FA4
-sub_8088FA4: @ 8088FA4
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08088FBC @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r1, 0x3C]
- lsls r0, 24
- lsrs r0, 24
- bx lr
- .align 2, 0
-_08088FBC: .4byte gSprites
- thumb_func_end sub_8088FA4
-
- thumb_func_start sub_8088FC0
-sub_8088FC0: @ 8088FC0
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08088FF4 @ =gSprites
- adds r4, r0
- ldr r0, _08088FF8 @ =sub_80890D8
- str r0, [r4, 0x1C]
- movs r1, 0
- movs r0, 0x78
- strh r0, [r4, 0x20]
- strh r1, [r4, 0x22]
- strh r1, [r4, 0x24]
- strh r1, [r4, 0x26]
- adds r0, r4, 0
- adds r0, 0x2E
- movs r2, 0x10
- bl memset
- movs r0, 0x40
- strh r0, [r4, 0x3A]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08088FF4: .4byte gSprites
-_08088FF8: .4byte sub_80890D8
- thumb_func_end sub_8088FC0
-
- thumb_func_start sub_8088FFC
-sub_8088FFC: @ 8088FFC
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08089014 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- strh r1, [r2, 0x3A]
- bx lr
- .align 2, 0
-_08089014: .4byte gSprites
- thumb_func_end sub_8088FFC
-
- thumb_func_start sub_8089018
-sub_8089018: @ 8089018
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080890C4
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0808905C
- ldrb r0, [r4, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldr r0, _080890CC @ =gSpriteAffineAnimTable_0839F44C
- str r0, [r4, 0x10]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- movs r0, 0x76
- strh r0, [r4, 0x20]
- ldr r0, _080890D0 @ =0x0000ffd0
- strh r0, [r4, 0x22]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- movs r0, 0x40
- strh r0, [r4, 0x30]
- adds r0, 0xC0
- strh r0, [r4, 0x32]
-_0808905C:
- ldrh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 24
- ldrh r1, [r4, 0x30]
- adds r0, r1
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x78
- bl Cos
- strh r0, [r4, 0x24]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x78
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r2, [r4, 0x32]
- movs r0, 0x32
- ldrsh r1, [r4, r0]
- ldr r0, _080890D4 @ =0x000007ff
- cmp r1, r0
- bgt _08089092
- adds r0, r2, 0
- adds r0, 0x60
- strh r0, [r4, 0x32]
-_08089092:
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0x81
- ble _080890C4
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r1, [r4, 0x1]
- lsrs r1, 6
- ldrb r2, [r4, 0x3]
- lsrs r2, 6
- adds r0, r4, 0
- movs r3, 0
- bl CalcCenterToCornerVec
-_080890C4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080890CC: .4byte gSpriteAffineAnimTable_0839F44C
-_080890D0: .4byte 0x0000ffd0
-_080890D4: .4byte 0x000007ff
- thumb_func_end sub_8089018
-
- thumb_func_start sub_80890D8
-sub_80890D8: @ 80890D8
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- movs r1, 0x8C
- bl Cos
- movs r5, 0
- strh r0, [r4, 0x24]
- movs r2, 0x32
- ldrsh r0, [r4, r2]
- movs r1, 0x48
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x32]
- adds r0, 0x4
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x32]
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- cmp r0, 0x40
- beq _08089136
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08089148 @ =gSprites
- adds r1, r0
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- ldrh r0, [r4, 0x24]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r1, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- subs r0, 0x8
- strh r0, [r1, 0x22]
- strh r5, [r1, 0x24]
- strh r5, [r1, 0x26]
-_08089136:
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0x7F
- ble _08089142
- movs r0, 0x1
- strh r0, [r4, 0x3C]
-_08089142:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08089148: .4byte gSprites
- thumb_func_end sub_80890D8
-
- thumb_func_start sub_808914C
-sub_808914C: @ 808914C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08089220
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _08089196
- ldrb r0, [r4, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldr r0, _08089228 @ =gSpriteAffineAnimTable_0839F44C
- str r0, [r4, 0x10]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- movs r0, 0x5E
- strh r0, [r4, 0x20]
- ldr r0, _0808922C @ =0x0000ffe0
- strh r0, [r4, 0x22]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- movs r0, 0xF0
- strh r0, [r4, 0x30]
- movs r0, 0x80
- lsls r0, 4
- strh r0, [r4, 0x32]
- movs r0, 0x80
- strh r0, [r4, 0x36]
-_08089196:
- ldrh r1, [r4, 0x32]
- lsls r1, 16
- asrs r1, 24
- ldrh r2, [r4, 0x30]
- adds r2, r1
- ldrh r0, [r4, 0x34]
- adds r0, r1
- strh r0, [r4, 0x34]
- movs r0, 0xFF
- ands r2, r0
- strh r2, [r4, 0x30]
- movs r3, 0x30
- ldrsh r0, [r4, r3]
- movs r1, 0x20
- bl Cos
- strh r0, [r4, 0x24]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x78
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r1, [r4, 0x32]
- movs r2, 0x32
- ldrsh r0, [r4, r2]
- movs r2, 0x80
- lsls r2, 1
- cmp r0, r2
- ble _080891D8
- ldrh r0, [r4, 0x36]
- subs r0, r1, r0
- strh r0, [r4, 0x32]
-_080891D8:
- ldrh r1, [r4, 0x36]
- movs r3, 0x36
- ldrsh r0, [r4, r3]
- cmp r0, 0xFF
- bgt _080891E8
- adds r0, r1, 0
- adds r0, 0x18
- strh r0, [r4, 0x36]
-_080891E8:
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0xFF
- bgt _080891F2
- strh r2, [r4, 0x32]
-_080891F2:
- movs r2, 0x34
- ldrsh r0, [r4, r2]
- cmp r0, 0x3B
- ble _08089220
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
-_08089220:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08089228: .4byte gSpriteAffineAnimTable_0839F44C
-_0808922C: .4byte 0x0000ffe0
- thumb_func_end sub_808914C
-
- thumb_func_start sub_8089230
-sub_8089230: @ 8089230
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_8088FC0
- ldr r1, _08089254 @ =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _08089258 @ =sub_808914C
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08089254: .4byte gSprites
-_08089258: .4byte sub_808914C
- thumb_func_end sub_8089230
-
- thumb_func_start FldEff_FlyIn
-FldEff_FlyIn: @ 808925C
- push {lr}
- ldr r0, _0808926C @ =sub_8089270
- movs r1, 0xFE
- bl CreateTask
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0808926C: .4byte sub_8089270
- thumb_func_end FldEff_FlyIn
-
- thumb_func_start sub_8089270
-sub_8089270: @ 8089270
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08089298 @ =gUnknown_0839F454
- ldr r2, _0808929C @ =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_08089298: .4byte gUnknown_0839F454
-_0808929C: .4byte gTasks
- thumb_func_end sub_8089270
-
- thumb_func_start sub_80892A0
-sub_80892A0: @ 80892A0
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, _08089348 @ =gPlayerAvatar
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0808934C @ =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _080892CA
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _08089342
-_080892CA:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0x11
- strh r0, [r5, 0xC]
- ldrb r0, [r6]
- strh r0, [r5, 0x26]
- movs r0, 0x1
- strb r0, [r6, 0x6]
- bl SetPlayerAvatarStateMask
- ldrh r1, [r5, 0x26]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080892F2
- ldrb r0, [r4, 0x1A]
- movs r1, 0
- bl sub_8127ED0
-_080892F2:
- movs r0, 0x3
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_805B980
- bl CameraObjectReset2
- adds r0, r4, 0
- movs r1, 0x3
- bl FieldObjectTurn
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08089350 @ =gSprites
- adds r0, r1
- movs r1, 0x16
- bl StartSpriteAnim
- ldrb r1, [r4, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
- bl sub_8088F60
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0xA]
- bl sub_8088FC0
- ldrb r0, [r5, 0xA]
- ldrb r1, [r4, 0x4]
- bl sub_8088FFC
-_08089342:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08089348: .4byte gPlayerAvatar
-_0808934C: .4byte gMapObjects
-_08089350: .4byte gSprites
- thumb_func_end sub_80892A0
-
- thumb_func_start sub_8089354
-sub_8089354: @ 8089354
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r1, [r5, 0xC]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _0808936C
- subs r0, r1, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _080893AC
-_0808936C:
- ldr r0, _080893B4 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080893B8 @ =gMapObjects
- adds r0, r1
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _080893BC @ =gSprites
- adds r4, r0
- ldrb r0, [r5, 0xA]
- movs r1, 0x40
- bl sub_8088FFC
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- movs r1, 0
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- strh r1, [r4, 0x24]
- strh r1, [r4, 0x26]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- strh r1, [r5, 0xC]
-_080893AC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080893B4: .4byte gPlayerAvatar
-_080893B8: .4byte gMapObjects
-_080893BC: .4byte gSprites
- thumb_func_end sub_8089354
-
- thumb_func_start sub_80893C0
-sub_80893C0: @ 80893C0
- push {r4,lr}
- sub sp, 0x24
- adds r4, r0, 0
- ldr r1, _08089408 @ =gUnknown_0839F470
- mov r0, sp
- movs r2, 0x24
- bl memcpy
- ldr r0, _0808940C @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08089410 @ =gSprites
- adds r1, r0
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- strh r0, [r1, 0x26]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x11
- ble _080893FE
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080893FE:
- add sp, 0x24
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08089408: .4byte gUnknown_0839F470
-_0808940C: .4byte gPlayerAvatar
-_08089410: .4byte gSprites
- thumb_func_end sub_80893C0
-
- thumb_func_start sub_8089414
-sub_8089414: @ 8089414
- push {r4-r6,lr}
- adds r6, r0, 0
- ldrb r0, [r6, 0xA]
- bl sub_8088FA4
- lsls r0, 24
- cmp r0, 0
- beq _08089478
- ldr r0, _08089480 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r5, r0, 3
- adds r5, r0
- lsls r5, 2
- ldr r0, _08089484 @ =gMapObjects
- adds r5, r0
- ldrb r0, [r5, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08089488 @ =gSprites
- adds r4, r0
- ldrb r1, [r5, 0x1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r1
- strb r0, [r5, 0x1]
- movs r0, 0x10
- ldrsh r1, [r5, r0]
- movs r0, 0x12
- ldrsh r2, [r5, r0]
- adds r0, r5, 0
- bl sub_805C058
- movs r0, 0
- strh r0, [r4, 0x24]
- strh r0, [r4, 0x26]
- adds r4, 0x3E
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- bl sub_8059BF4
- adds r0, r5, 0
- movs r1, 0x39
- bl FieldObjectSetSpecialAnim
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_08089478:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08089480: .4byte gPlayerAvatar
-_08089484: .4byte gMapObjects
-_08089488: .4byte gSprites
- thumb_func_end sub_8089414
-
- thumb_func_start sub_808948C
-sub_808948C: @ 808948C
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080894BC @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080894C0 @ =gMapObjects
- adds r0, r1
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080894B4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- ldrb r0, [r4, 0xA]
- bl sub_8089230
-_080894B4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080894BC: .4byte gPlayerAvatar
-_080894C0: .4byte gMapObjects
- thumb_func_end sub_808948C
-
- thumb_func_start sub_80894C4
-sub_80894C4: @ 80894C4
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0xA]
- bl sub_8088FA4
- lsls r0, 24
- cmp r0, 0
- beq _080894F0
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080894F8 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x10
- strh r0, [r4, 0xA]
-_080894F0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080894F8: .4byte gSprites
- thumb_func_end sub_80894C4
-
- thumb_func_start fishE
-fishE: @ 80894FC
- push {r4-r7,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0xA]
- subs r0, 0x1
- strh r0, [r5, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _08089566
- ldr r6, _0808956C @ =gPlayerAvatar
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08089570 @ =gMapObjects
- adds r4, r0, r1
- movs r7, 0
- ldrh r1, [r5, 0x26]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08089530
- movs r7, 0x3
- ldrb r0, [r4, 0x1A]
- movs r1, 0x1
- bl sub_8127ED0
-_08089530:
- adds r0, r7, 0
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_805B980
- adds r0, r4, 0
- movs r1, 0x1
- bl FieldObjectTurn
- ldrh r0, [r5, 0x26]
- strb r0, [r6]
- movs r0, 0
- strb r0, [r6, 0x6]
- movs r0, 0x20
- bl FieldEffectActiveListRemove
- ldr r0, _08089574 @ =sub_8089270
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08089566:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808956C: .4byte gPlayerAvatar
-_08089570: .4byte gMapObjects
-_08089574: .4byte sub_8089270
- thumb_func_end fishE
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/decoration_inventory.s b/data/decoration_inventory.s
deleted file mode 100644
index a70dedbe5..000000000
--- a/data/decoration_inventory.s
+++ /dev/null
@@ -1,16 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-@ pointer to decorations, capacity
- .align 2
-gDecorationInventories:: @ 8402E40
- .4byte gSaveBlock1 + 0x26A0, 10 @ DESK
- .4byte gSaveBlock1 + 0x26AA, 10 @ CHAIR
- .4byte gSaveBlock1 + 0x26B4, 10 @ PLANT
- .4byte gSaveBlock1 + 0x26BE, 30 @ ORNAMENT
- .4byte gSaveBlock1 + 0x26DC, 30 @ MAT
- .4byte gSaveBlock1 + 0x26FA, 10 @ POSTER
- .4byte gSaveBlock1 + 0x2704, 40 @ DOLL
- .4byte gSaveBlock1 + 0x272C, 10 @ CUSHION
diff --git a/data/field_effect.s b/data/field_effect.s
deleted file mode 100644
index 3347bc19c..000000000
--- a/data/field_effect.s
+++ /dev/null
@@ -1,433 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gSpriteImage_839DC14:: @ 839DC14
- .incbin "graphics/birch_speech/birch.4bpp"
-
- .align 2
-gBirchPalette:: @ 839E414
- .incbin "graphics/birch_speech/birch.gbapal"
-
- .align 2
-gSpriteImage_839E434:: @ 839E434
- .incbin "graphics/misc/pokeball_glow.4bpp"
-
- .align 2
-gFieldEffectObjectPalette4: @ 839E454
- .incbin "graphics/field_effect_objects/palettes/04.gbapal"
-
- .align 2
-gSpriteImage_839E474:: @ 839E474
- .incbin "graphics/misc/pokecenter_monitor/0.4bpp"
-
- .align 2
-gSpriteImage_839E534:: @ 839E534
- .incbin "graphics/misc/pokecenter_monitor/1.4bpp"
-
- .align 2
-gSpriteImage_839E5F4:: @ 839E5F4
- .incbin "graphics/misc/big_hof_monitor.4bpp"
-
- .align 2
-gSpriteImage_839E7F4:: @ 839E7F4
- .incbin "graphics/misc/small_hof_monitor.4bpp"
-
- .align 2
-gFieldEffectObjectPalette5: @ 839E8F4
- .incbin "graphics/field_effect_objects/palettes/05.gbapal"
-
-@ Graphics for the lights streaking past your Pokémon when it uses a field move.
-
- .align 2
-gFieldMoveStreaksTiles:: @ 839E914
- .incbin "graphics/misc/field_move_streaks.4bpp"
-
- .align 2
-gFieldMoveStreaksPalette:: @ 839EB14
- .incbin "graphics/misc/field_move_streaks.gbapal"
-
- .align 2
-gFieldMoveStreaksTilemap:: @ 839EB34
- .incbin "graphics/misc/field_move_streaks_map.bin"
-
-@ The following light streaks effect is used when the map is dark (e.g. a cave).
-
- .align 2
-gDarknessFieldMoveStreaksTiles:: @ 839EDB4
- .incbin "graphics/misc/darkness_field_move_streaks.4bpp"
-
- .align 2
-gDarknessFieldMoveStreaksPalette:: @ 839EE34
- .incbin "graphics/misc/darkness_field_move_streaks.gbapal"
-
- .align 2
-gDarknessFieldMoveStreaksTilemap:: @ 839EE54
- .incbin "graphics/misc/darkness_field_move_streaks_map.bin"
-
- .align 2
-gFieldEffectScriptFuncs:: @ 839F0D4
- .4byte FieldEffectCmd_loadtiles
- .4byte FieldEffectCmd_loadfadedpal
- .4byte FieldEffectCmd_loadpal
- .4byte FieldEffectCmd_callnative
- .4byte FieldEffectCmd_end
- .4byte FieldEffectCmd_loadgfx_callnative
- .4byte FieldEffectCmd_loadtiles_callnative
- .4byte FieldEffectCmd_loadfadedpal_callnative
-
- .align 2
-gOamData_839F0F4:: @ 839F0F4
- .2byte 0x0000
- .2byte 0xC000
- .2byte 0x0000
-
- .align 2
-gOamData_839F0FC:: @ 839F0FC
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0000
-
- .align 2
-gOamData_839F104:: @ 839F104
- .2byte 0x0000
- .2byte 0x4000
- .2byte 0x0000
-
- .align 2
-gSpriteImageTable_839F10C:: @ 839F10C
- obj_frame_tiles gSpriteImage_839DC14, 0x800
-
- .align 2
-gUnknown_0839F114:: @ 839F114
- obj_pal gBirchPalette, 0x1006
-
- .align 2
-gSpriteAnim_839F11C:: @ 839F11C
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_839F124:: @ 839F124
- .4byte gSpriteAnim_839F11C
-
- .align 2
-gSpriteTemplate_839F128:: @ 839F128
- spr_template 0xFFFF, 4102, gOamData_839F0F4, gSpriteAnimTable_839F124, gSpriteImageTable_839F10C, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gFieldEffectObjectPaletteInfo4:: @ 839F140
- obj_pal gFieldEffectObjectPalette4, 0x1007
-
- .align 2
-gFieldEffectObjectPaletteInfo5:: @ 839F148
- obj_pal gFieldEffectObjectPalette5, 0x1010
-
- .align 2
-gOamData_839F150:: @ 839F150
- .2byte 0x4000
- .2byte 0x8000
- .2byte 0x0000
-
- .align 2
-gSpriteImageTable_839F158:: @ 839F158
- obj_frame_tiles gSpriteImage_839E434, 0x20
-
- .align 2
-gSpriteImageTable_839F160:: @ 839F160
- obj_frame_tiles gSpriteImage_839E474, 0xc0
- obj_frame_tiles gSpriteImage_839E534, 0xc0
-
- .align 2
-gSpriteImageTable_839F170:: @ 839F170
- obj_frame_tiles gSpriteImage_839E5F4, 0x200
-
- .align 2
-gSpriteImageTable_839F178:: @ 839F178
- obj_frame_tiles gSpriteImage_839E7F4, 0x200
-
- .align 2
-Unknown_39F180:: @ 839F180
- subsprite -12, -8, 2, 0, 16x8
- subsprite 4, -8, 2, 2, 8x8
- subsprite -12, 0, 2, 3, 16x8
- subsprite 4, 0, 2, 5, 8x8
-
- .align 2
-gUnknown_0839F1A0:: @ 839F1A0
- .4byte 4, Unknown_39F180
-
- .align 2
-Unknown_39F1A8:: @ 39F1A8
- subsprite -32, -8, 2, 0, 32x8
- subsprite 0, -8, 2, 4, 32x8
- subsprite -32, 0, 2, 8, 32x8
- subsprite 0, 0, 2, 12, 32x8
-
- .align 2
-gUnknown_0839F1C8:: @ 839F1C8
- .4byte 4, Unknown_39F1A8
-
- .align 2
-gSpriteAnim_839F1D0:: @ 839F1D0
- obj_image_anim_frame 0, 1
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_839F1D8:: @ 839F1D8
- obj_image_anim_frame 0, 16
- obj_image_anim_frame 1, 16
- obj_image_anim_frame 0, 16
- obj_image_anim_frame 1, 16
- obj_image_anim_frame 0, 16
- obj_image_anim_frame 1, 16
- obj_image_anim_frame 0, 16
- obj_image_anim_frame 1, 16
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_839F1FC:: @ 839F1FC
- .4byte gSpriteAnim_839F1D0
- .4byte gSpriteAnim_839F1D8
-
- .align 2
-gSpriteAnimTable_839F204:: @ 839F204
- .4byte gSpriteAnim_839F1D0
-
- .align 2
-gSpriteTemplate_839F208:: @ 839F208
- spr_template 0xFFFF, 4103, gOamData_839F0FC, gSpriteAnimTable_839F1FC, gSpriteImageTable_839F158, gDummySpriteAffineAnimTable, SpriteCB_PokeballGlow
-
- .align 2
-gSpriteTemplate_839F220:: @ 839F220
- spr_template 0xFFFF, 4100, gOamData_839F104, gSpriteAnimTable_839F1FC, gSpriteImageTable_839F160, gDummySpriteAffineAnimTable, SpriteCB_PokecenterMonitor
-
- .align 2
-gSpriteTemplate_839F238:: @ 839F238
- spr_template 0xFFFF, 4112, gOamData_839F104, gSpriteAnimTable_839F204, gSpriteImageTable_839F170, gDummySpriteAffineAnimTable, SpriteCB_HallOfFameMonitor
-
- .align 2
-gSpriteTemplate_839F250:: @ 839F250
- spr_template 0xFFFF, 4112, gOamData_839F150, gSpriteAnimTable_839F204, gSpriteImageTable_839F178, gDummySpriteAffineAnimTable, SpriteCB_HallOfFameMonitor
-
- .align 2
-gUnknown_0839F268:: @ 839F268
- .4byte PokecenterHealEffect_0
- .4byte PokecenterHealEffect_1
- .4byte PokecenterHealEffect_2
- .4byte PokecenterHealEffect_3
-
- .align 2
-gUnknown_0839F278:: @ 839F278
- .4byte HallOfFameRecordEffect_0
- .4byte HallOfFameRecordEffect_1
- .4byte HallOfFameRecordEffect_2
- .4byte HallOfFameRecordEffect_3
-
- .align 2
-gUnknown_0839F288:: @ 839F288
- .4byte PokeballGlowEffect_0
- .4byte PokeballGlowEffect_1
- .4byte PokeballGlowEffect_2
- .4byte PokeballGlowEffect_3
- .4byte PokeballGlowEffect_4
- .4byte PokeballGlowEffect_5
- .4byte PokeballGlowEffect_6
- .4byte PokeballGlowEffect_7
-
-gUnknown_0839F2A8:: @ 839F2A8
- .2byte 0, 0
- .2byte 6, 0
- .2byte 0, 4
- .2byte 6, 4
- .2byte 0, 8
- .2byte 6, 8
-
-gUnknown_0839F2C0:: @ 839F2C0
- .byte 16, 12, 8, 0
-
-gUnknown_0839F2C4:: @ 839F2C4
- .byte 16, 12, 8, 0
-
-gUnknown_0839F2C8:: @ 839F2C8
- .space 4
-
- .align 2
-gUnknown_0839F2CC:: @ 839F2CC
- .4byte sub_80867AC
- .4byte sub_8086854
- .4byte sub_8086870
- .4byte sub_80868E4
- .4byte sub_808699C
- .4byte sub_80869B8
- .4byte sub_80869F8
-
- .align 2
-gUnknown_0839F2E8:: @ 839F2E8
- .4byte sub_8086AA0
- .4byte sub_8086AC0
- .4byte sub_8086B30
- .4byte sub_8086B54
- .4byte sub_8086B64
- .4byte sub_8086B88
-
- .align 2
-gUnknown_0839F300:: @ 839F300
- .4byte sub_8086CF4
- .4byte sub_8086D70
- .4byte sub_8086DB0
- .4byte sub_8086E10
- .4byte sub_8086E50
- .4byte sub_8086EB0
- .4byte sub_8086ED4
-
- .align 2
-gUnknown_0839F31C:: @ 839F31C
- .4byte sub_8086FB0
- .4byte waterfall_1_do_anim_probably
- .4byte waterfall_2_wait_anim_finish_probably
- .4byte sub_8087030
- .4byte sub_8087058
-
- .align 2
-gUnknown_0839F330:: @ 839F330
- .4byte sub_8087124
- .4byte dive_2_unknown
- .4byte dive_3_unknown
-
- .align 2
-gUnknown_0839F33C:: @ 839F33C
- .4byte sub_808722C
- .4byte sub_8087264
- .4byte sub_8087298
- .4byte sub_80872E4
- .4byte sub_80873D8
- .4byte sub_80873F4
-
- .align 2
-gUnknown_0839F354:: @ 839F354
- .4byte sub_80874CC
- .4byte sub_80874FC
- .4byte sub_8087548
- .4byte sub_808759C
-
- .align 2
-gUnknown_0839F364:: @ 839F364
- .4byte sub_80876C8
- .4byte sub_80876F8
- .4byte sub_8087774
- .4byte sub_80877AC
- .4byte sub_80877D4
-
- .align 2
-gUnknown_0839F378:: @ 839F378
- .4byte sub_80878F4
- .4byte sub_8087914
-
-gUnknown_0839F380:: @ 839F380
- .byte 1, 3, 4, 2, 1
-
- .align 2
-gUnknown_0839F388:: @ 839F388
- .4byte sub_8087AA4
- .4byte sub_8087AC8
-
- .align 2
-gUnknown_0839F390:: @ 839F390
- .4byte sub_8087BEC
- .4byte sub_8087C14
- .4byte sub_8087CA4
- .4byte sub_8087D78
-
- .align 2
-gUnknown_0839F3A0:: @ 839F3A0
- .4byte sub_8087E4C
- .4byte sub_8087ED8
- .4byte sub_8087FDC
-
- .align 2
-gUnknown_0839F3AC:: @ 839F3AC
- .4byte sub_8088150
- .4byte sub_80881C0
- .4byte sub_8088228
- .4byte sub_80882B4
- .4byte sub_80882E4
- .4byte sub_8088338
- .4byte sub_8088380
-
- .align 2
-gUnknown_0839F3C8:: @ 839F3C8
- .4byte sub_80884AC
- .4byte sub_80884E8
- .4byte sub_8088554
- .4byte sub_80885A8
- .4byte sub_80885D8
- .4byte sub_808860C
- .4byte sub_808862C
-
- .align 2
-gUnknown_0839F3E4:: @ 839F3E4
- .4byte sub_8088984
- .4byte sub_80889E4
- .4byte sub_8088A30
- .4byte sub_8088A78
- .4byte sub_8088AF4
-
- .align 2
-gUnknown_0839F3F8:: @ 839F3F8
- .4byte sub_8088CA0
- .4byte sub_8088CF8
- .4byte sub_8088D3C
- .4byte sub_8088D94
- .4byte sub_8088DD8
- .4byte sub_8088E2C
- .4byte sub_8088EB4
- .4byte sub_8088F10
- .4byte sub_8088F30
-
-SpriteAffineAnim_839F41C:
- obj_rot_scal_anim_frame 8, 8, -30, 0
- obj_rot_scal_anim_frame 28, 28, 0, 30
- obj_rot_scal_anim_end
-
-SpriteAffineAnim_839F434:
- obj_rot_scal_anim_frame 256, 256, 64, 0
- obj_rot_scal_anim_frame -10, -10, 0, 22
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_0839F44C:: @ 839F44C
- .4byte SpriteAffineAnim_839F41C
- .4byte SpriteAffineAnim_839F434
-
- .align 2
-gUnknown_0839F454:: @ 839F454
- .4byte sub_80892A0
- .4byte sub_8089354
- .4byte sub_80893C0
- .4byte sub_8089414
- .4byte sub_808948C
- .4byte sub_80894C4
- .4byte fishE
-
-gUnknown_0839F470:: @ 839F470
- .2byte -2
- .2byte -4
- .2byte -5
- .2byte -6
- .2byte -7
- .2byte -8
- .2byte -8
- .2byte -8
- .2byte -7
- .2byte -7
- .2byte -6
- .2byte -5
- .2byte -3
- .2byte -2
- .2byte 0
- .2byte 2
- .2byte 4
- .2byte 8
diff --git a/data/maps/UnknownMap_082CF564/border.bin b/data/maps/UnknownMap_082CF564/border.bin
index 19d906679..19d906679 100755..100644
--- a/data/maps/UnknownMap_082CF564/border.bin
+++ b/data/maps/UnknownMap_082CF564/border.bin
diff --git a/data/maps/UnknownMap_082CF564/map.bin b/data/maps/UnknownMap_082CF564/map.bin
index ca93fa0e2..ca93fa0e2 100755..100644
--- a/data/maps/UnknownMap_082CF564/map.bin
+++ b/data/maps/UnknownMap_082CF564/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082D05D8/border.bin b/data/maps/UnknownMap_082D05D8/border.bin
index 19d906679..19d906679 100755..100644
--- a/data/maps/UnknownMap_082D05D8/border.bin
+++ b/data/maps/UnknownMap_082D05D8/border.bin
diff --git a/data/maps/UnknownMap_082D05D8/map.bin b/data/maps/UnknownMap_082D05D8/map.bin
index 37f05b971..37f05b971 100755..100644
--- a/data/maps/UnknownMap_082D05D8/map.bin
+++ b/data/maps/UnknownMap_082D05D8/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082D05FC/border.bin b/data/maps/UnknownMap_082D05FC/border.bin
index 19d906679..19d906679 100755..100644
--- a/data/maps/UnknownMap_082D05FC/border.bin
+++ b/data/maps/UnknownMap_082D05FC/border.bin
diff --git a/data/maps/UnknownMap_082D05FC/map.bin b/data/maps/UnknownMap_082D05FC/map.bin
index ca93fa0e2..ca93fa0e2 100755..100644
--- a/data/maps/UnknownMap_082D05FC/map.bin
+++ b/data/maps/UnknownMap_082D05FC/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E55C8/border.bin b/data/maps/UnknownMap_082E55C8/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E55C8/border.bin
+++ b/data/maps/UnknownMap_082E55C8/border.bin
diff --git a/data/maps/UnknownMap_082E55C8/map.bin b/data/maps/UnknownMap_082E55C8/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E55C8/map.bin
+++ b/data/maps/UnknownMap_082E55C8/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E55EC/border.bin b/data/maps/UnknownMap_082E55EC/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E55EC/border.bin
+++ b/data/maps/UnknownMap_082E55EC/border.bin
diff --git a/data/maps/UnknownMap_082E55EC/map.bin b/data/maps/UnknownMap_082E55EC/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E55EC/map.bin
+++ b/data/maps/UnknownMap_082E55EC/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E5610/border.bin b/data/maps/UnknownMap_082E5610/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E5610/border.bin
+++ b/data/maps/UnknownMap_082E5610/border.bin
diff --git a/data/maps/UnknownMap_082E5610/map.bin b/data/maps/UnknownMap_082E5610/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E5610/map.bin
+++ b/data/maps/UnknownMap_082E5610/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E5634/border.bin b/data/maps/UnknownMap_082E5634/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E5634/border.bin
+++ b/data/maps/UnknownMap_082E5634/border.bin
diff --git a/data/maps/UnknownMap_082E5634/map.bin b/data/maps/UnknownMap_082E5634/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E5634/map.bin
+++ b/data/maps/UnknownMap_082E5634/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E5658/border.bin b/data/maps/UnknownMap_082E5658/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E5658/border.bin
+++ b/data/maps/UnknownMap_082E5658/border.bin
diff --git a/data/maps/UnknownMap_082E5658/map.bin b/data/maps/UnknownMap_082E5658/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E5658/map.bin
+++ b/data/maps/UnknownMap_082E5658/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E567C/border.bin b/data/maps/UnknownMap_082E567C/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E567C/border.bin
+++ b/data/maps/UnknownMap_082E567C/border.bin
diff --git a/data/maps/UnknownMap_082E567C/map.bin b/data/maps/UnknownMap_082E567C/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E567C/map.bin
+++ b/data/maps/UnknownMap_082E567C/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E56A0/border.bin b/data/maps/UnknownMap_082E56A0/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E56A0/border.bin
+++ b/data/maps/UnknownMap_082E56A0/border.bin
diff --git a/data/maps/UnknownMap_082E56A0/map.bin b/data/maps/UnknownMap_082E56A0/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E56A0/map.bin
+++ b/data/maps/UnknownMap_082E56A0/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E56C4/border.bin b/data/maps/UnknownMap_082E56C4/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E56C4/border.bin
+++ b/data/maps/UnknownMap_082E56C4/border.bin
diff --git a/data/maps/UnknownMap_082E56C4/map.bin b/data/maps/UnknownMap_082E56C4/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E56C4/map.bin
+++ b/data/maps/UnknownMap_082E56C4/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E56E8/border.bin b/data/maps/UnknownMap_082E56E8/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E56E8/border.bin
+++ b/data/maps/UnknownMap_082E56E8/border.bin
diff --git a/data/maps/UnknownMap_082E56E8/map.bin b/data/maps/UnknownMap_082E56E8/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E56E8/map.bin
+++ b/data/maps/UnknownMap_082E56E8/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E570C/border.bin b/data/maps/UnknownMap_082E570C/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E570C/border.bin
+++ b/data/maps/UnknownMap_082E570C/border.bin
diff --git a/data/maps/UnknownMap_082E570C/map.bin b/data/maps/UnknownMap_082E570C/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E570C/map.bin
+++ b/data/maps/UnknownMap_082E570C/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E5730/border.bin b/data/maps/UnknownMap_082E5730/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E5730/border.bin
+++ b/data/maps/UnknownMap_082E5730/border.bin
diff --git a/data/maps/UnknownMap_082E5730/map.bin b/data/maps/UnknownMap_082E5730/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E5730/map.bin
+++ b/data/maps/UnknownMap_082E5730/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E5754/border.bin b/data/maps/UnknownMap_082E5754/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E5754/border.bin
+++ b/data/maps/UnknownMap_082E5754/border.bin
diff --git a/data/maps/UnknownMap_082E5754/map.bin b/data/maps/UnknownMap_082E5754/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E5754/map.bin
+++ b/data/maps/UnknownMap_082E5754/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E5778/border.bin b/data/maps/UnknownMap_082E5778/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E5778/border.bin
+++ b/data/maps/UnknownMap_082E5778/border.bin
diff --git a/data/maps/UnknownMap_082E5778/map.bin b/data/maps/UnknownMap_082E5778/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E5778/map.bin
+++ b/data/maps/UnknownMap_082E5778/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082E579C/border.bin b/data/maps/UnknownMap_082E579C/border.bin
index b15c94f96..b15c94f96 100755..100644
--- a/data/maps/UnknownMap_082E579C/border.bin
+++ b/data/maps/UnknownMap_082E579C/border.bin
diff --git a/data/maps/UnknownMap_082E579C/map.bin b/data/maps/UnknownMap_082E579C/map.bin
index 22a47d94e..22a47d94e 100755..100644
--- a/data/maps/UnknownMap_082E579C/map.bin
+++ b/data/maps/UnknownMap_082E579C/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_082EDF30/border.bin b/data/maps/UnknownMap_082EDF30/border.bin
index 9e4b3fb7a..9e4b3fb7a 100755..100644
--- a/data/maps/UnknownMap_082EDF30/border.bin
+++ b/data/maps/UnknownMap_082EDF30/border.bin
diff --git a/data/maps/UnknownMap_082EDF30/map.bin b/data/maps/UnknownMap_082EDF30/map.bin
index 028da0526..028da0526 100755..100644
--- a/data/maps/UnknownMap_082EDF30/map.bin
+++ b/data/maps/UnknownMap_082EDF30/map.bin
diff --git a/data/maps/UnknownMap_082FF894/border.bin b/data/maps/UnknownMap_082FF894/border.bin
index f1629c020..f1629c020 100755..100644
--- a/data/maps/UnknownMap_082FF894/border.bin
+++ b/data/maps/UnknownMap_082FF894/border.bin
diff --git a/data/maps/UnknownMap_082FF894/map.bin b/data/maps/UnknownMap_082FF894/map.bin
index fd294d9b6..fd294d9b6 100755..100644
--- a/data/maps/UnknownMap_082FF894/map.bin
+++ b/data/maps/UnknownMap_082FF894/map.bin
Binary files differ
diff --git a/data/maps/UnknownMap_08302970/border.bin b/data/maps/UnknownMap_08302970/border.bin
index c3fe51511..c3fe51511 100755..100644
--- a/data/maps/UnknownMap_08302970/border.bin
+++ b/data/maps/UnknownMap_08302970/border.bin
diff --git a/data/maps/UnknownMap_08302970/map.bin b/data/maps/UnknownMap_08302970/map.bin
index dd82c58d3..dd82c58d3 100755..100644
--- a/data/maps/UnknownMap_08302970/map.bin
+++ b/data/maps/UnknownMap_08302970/map.bin
diff --git a/data/maps/UnknownMap_083041B4/border.bin b/data/maps/UnknownMap_083041B4/border.bin
index f0eabd248..f0eabd248 100755..100644
--- a/data/maps/UnknownMap_083041B4/border.bin
+++ b/data/maps/UnknownMap_083041B4/border.bin
diff --git a/data/maps/UnknownMap_083041B4/map.bin b/data/maps/UnknownMap_083041B4/map.bin
index ec344933f..ec344933f 100755..100644
--- a/data/maps/UnknownMap_083041B4/map.bin
+++ b/data/maps/UnknownMap_083041B4/map.bin
diff --git a/data/maps/UnreferencedMap/border.bin b/data/maps/UnreferencedMap/border.bin
index c3fe51511..c3fe51511 100755..100644
--- a/data/maps/UnreferencedMap/border.bin
+++ b/data/maps/UnreferencedMap/border.bin
diff --git a/data/maps/UnreferencedMap/map.bin b/data/maps/UnreferencedMap/map.bin
index 17a14a8d5..17a14a8d5 100755..100644
--- a/data/maps/UnreferencedMap/map.bin
+++ b/data/maps/UnreferencedMap/map.bin
diff --git a/include/asm.inc.h b/include/asm.inc.h
index dcc6190cc..1a5e9447f 100644
--- a/include/asm.inc.h
+++ b/include/asm.inc.h
@@ -42,7 +42,7 @@ void LoadWordFromTwoHalfwords(u16 *, u32 *);
u8 Daycare_CountPokemon(struct BoxPokemon *);
// asm/daycare.o
-void sub_8041324(struct BoxPokemon *, void *);
+void sub_8041324(struct BoxPokemon *, struct RecordMixing_UnknownStruct *);
void sub_8041790(int i);
u16 sub_8041870(u16);
void sub_8041940(void);
@@ -207,9 +207,9 @@ void sub_8083A84(TaskFunc);
s32 sub_8083BF4(u8 id);
// asm/field_effect.o
-u8 CreateTrainerSprite_BirchSpeech(u8, u16, u16, u8, void *);
-void LoadTrainerGfx_TrainerCard(u8 gender, int, void *);
-u8 CreateBirchSprite(u8, u8, u8);
+u8 CreateTrainerSprite_BirchSpeech(u8, s16, s16, u8, u8 *);
+void LoadTrainerGfx_TrainerCard(u8 gender, u16, u8 *);
+u8 CreateBirchSprite(s16, s16, u8);
// asm/unknown_task.o
void remove_some_task(void);
diff --git a/include/decoration.h b/include/decoration.h
index 01a00ee91..01a00ee91 100755..100644
--- a/include/decoration.h
+++ b/include/decoration.h
diff --git a/include/decoration_inventory.h b/include/decoration_inventory.h
new file mode 100644
index 000000000..dd87e7239
--- /dev/null
+++ b/include/decoration_inventory.h
@@ -0,0 +1,8 @@
+//
+// Created by Scott Norton on 6/5/17.
+//
+
+#ifndef POKERUBY_DECORATION_INVENTORY_H
+#define POKERUBY_DECORATION_INVENTORY_H
+
+#endif //POKERUBY_DECORATION_INVENTORY_H
diff --git a/include/field_effect.h b/include/field_effect.h
index a46c048cb..2cf7f0c7a 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -3,6 +3,85 @@
#include "sprite.h"
+enum FieldEffectScriptIdx
+{
+ FLDEFF_EXCLAMATION_MARK_ICON_1,
+ FLDEFF_USE_CUT_ON_GRASS,
+ FLDEFF_USE_CUT_ON_TREE,
+ FLDEFF_SHADOW,
+ FLDEFF_TALL_GRASS,
+ FLDEFF_RIPPLE,
+ FLDEFF_FIELD_MOVE_SHOW_MON,
+ FLDEFF_ASH,
+ FLDEFF_SURF_BLOB,
+ FLDEFF_USE_SURF,
+ FLDEFF_DUST,
+ FLDEFF_USE_SECRET_POWER_CAVE,
+ FLDEFF_JUMP_TALL_GRASS,
+ FLDEFF_SAND_FOOTPRINTS,
+ FLDEFF_JUMP_BIG_SPLASH,
+ FLDEFF_SPLASH,
+ FLDEFF_JUMP_SMALL_SPLASH,
+ FLDEFF_LONG_GRASS,
+ FLDEFF_JUMP_LONG_GRASS,
+ FLDEFF_UNKNOWN_19,
+ FLDEFF_UNKNOWN_20,
+ FLDEFF_UNKNOWN_21,
+ FLDEFF_UNKNOWN_22,
+ FLDEFF_BERRY_TREE_GROWTH_SPARKLE,
+ FLDEFF_DEEP_SAND_FOOTPRINTS,
+ FLDEFF_POKECENTER_HEAL,
+ FLDEFF_USE_SECRET_POWER_TREE,
+ FLDEFF_USE_SECRET_POWER_SHRUB,
+ FLDEFF_TREE_DISGUISE,
+ FLDEFF_MOUNTAIN_DISGUISE,
+ FLDEFF_NPCFLY_OUT,
+ FLDEFF_USE_FLY,
+ FLDEFF_FLY_IN,
+ FLDEFF_EXCLAMATION_MARK_ICON_2,
+ FLDEFF_FEET_IN_FLOWING_WATER,
+ FLDEFF_BIKE_TIRE_TRACKS,
+ FLDEFF_SAND_DISGUISE,
+ FLDEFF_USE_ROCK_SMASH,
+ FLDEFF_USE_DIG,
+ FLDEFF_SAND_PILE,
+ FLDEFF_USE_STRENGTH,
+ FLDEFF_SHORT_GRASS,
+ FLDEFF_HOT_SPRINGS_WATER,
+ FLDEFF_USE_WATERFALL,
+ FLDEFF_USE_DIVE,
+ FLDEFF_POKEBALL,
+ FLDEFF_HEART_ICON,
+ FLDEFF_NOP_47,
+ FLDEFF_NOP_48,
+ FLDEFF_POP_OUT_OF_ASH,
+ FLDEFF_LAVARIDGE_GYM_WARP,
+ FLDEFF_SWEET_SCENT,
+ FLDEFF_SAND_PILLAR,
+ FLDEFF_BUBBLES,
+ FLDEFF_SPARKLE,
+ FLDEFF_SECRET_POWER_CAVE,
+ FLDEFF_SECRET_POWER_TREE,
+ FLDEFF_SECRET_POWER_SHRUB,
+ FLDEFF_CUT_GRASS,
+ FLDEFF_FIELD_MOVE_SHOW_MON_INIT,
+ FLDEFF_USE_FLY_ANCIENT_TOMB,
+ FLDEFF_PCTURN_ON,
+ FLDEFF_HALL_OF_FAME_RECORD,
+ FLDEFF_USE_TELEPORT
+};
+
+extern const struct SpritePalette gTrainerFrontPicPaletteTable[2];
+extern const struct SpritePalette gUnknown_0839F114;
+extern const struct SpriteSheet gTrainerFrontPicTable[2];
+extern const struct SpriteTemplate gSpriteTemplate_839F128;
+extern const struct OamData gOamData_839F0F4;
+extern struct SpriteTemplate gUnknown_02024E8C;
+
+extern const struct SpritePalette *sub_80409C8(u16, u32, u32);
+
+extern u8 gLastFieldPokeMenuOpened;
+
u32 FieldEffectStart(u8 id);
bool8 FieldEffectCmd_loadtiles(u8 **script, u32 *val);
bool8 FieldEffectCmd_loadfadedpal(u8 **script, u32 *val);
@@ -25,5 +104,135 @@ void FieldEffectActiveListClear(void);
void FieldEffectActiveListAdd(u8 id);
void FieldEffectActiveListRemove(u8 id);
bool8 FieldEffectActiveListContains(u8 id);
+void sub_807DE38(u8 index);
+
+void SpriteCB_PokeballGlow(struct Sprite *);
+void SpriteCB_PokecenterMonitor(struct Sprite *);
+void SpriteCB_HallOfFameMonitor(struct Sprite *);
+
+void PokecenterHealEffect_0(struct Task *);
+void PokecenterHealEffect_1(struct Task *);
+void PokecenterHealEffect_2(struct Task *);
+void PokecenterHealEffect_3(struct Task *);
+
+void HallOfFameRecordEffect_0(struct Task *);
+void HallOfFameRecordEffect_1(struct Task *);
+void HallOfFameRecordEffect_2(struct Task *);
+void HallOfFameRecordEffect_3(struct Task *);
+
+void PokeballGlowEffect_0(struct Sprite *);
+void PokeballGlowEffect_1(struct Sprite *);
+void PokeballGlowEffect_2(struct Sprite *);
+void PokeballGlowEffect_3(struct Sprite *);
+void PokeballGlowEffect_4(struct Sprite *);
+void PokeballGlowEffect_5(struct Sprite *);
+void PokeballGlowEffect_6(struct Sprite *);
+void PokeballGlowEffect_7(struct Sprite *);
+
+bool8 sub_80867AC(struct Task *);
+bool8 sub_8086854(struct Task *);
+bool8 sub_8086870(struct Task *);
+bool8 sub_80868E4(struct Task *);
+bool8 sub_808699C(struct Task *);
+bool8 sub_80869B8(struct Task *);
+bool8 sub_80869F8(struct Task *);
+
+bool8 sub_8086AA0(struct Task *);
+bool8 sub_8086AC0(struct Task *);
+bool8 sub_8086B30(struct Task *);
+bool8 sub_8086B54(struct Task *);
+bool8 sub_8086B64(struct Task *);
+bool8 sub_8086B88(struct Task *);
+
+bool8 sub_8086CF4(struct Task *);
+bool8 sub_8086D70(struct Task *);
+bool8 sub_8086DB0(struct Task *);
+bool8 sub_8086E10(struct Task *);
+bool8 sub_8086E50(struct Task *);
+bool8 sub_8086EB0(struct Task *);
+bool8 sub_8086ED4(struct Task *);
+
+bool8 sub_8086FB0(struct Task *, struct MapObject *);
+bool8 waterfall_1_do_anim_probably(struct Task *, struct MapObject *);
+bool8 waterfall_2_wait_anim_finish_probably(struct Task *, struct MapObject *);
+bool8 sub_8087030(struct Task *, struct MapObject *);
+bool8 sub_8087058(struct Task *, struct MapObject *);
+
+bool8 sub_8087124(struct Task *);
+bool8 dive_2_unknown(struct Task *);
+bool8 dive_3_unknown(struct Task *);
+
+bool8 sub_808722C(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_8087264(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_8087298(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80872E4(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80873D8(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80873F4(struct Task *, struct MapObject *, struct Sprite *);
+
+bool8 sub_80874CC(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80874FC(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_8087548(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_808759C(struct Task *, struct MapObject *, struct Sprite *);
+
+bool8 sub_80876C8(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80876F8(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_8087774(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80877AC(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80877D4(struct Task *, struct MapObject *, struct Sprite *);
+
+void sub_80878F4(struct Task *);
+void sub_8087914(struct Task *);
+
+void sub_8087AA4(struct Task *);
+void sub_8087AC8(struct Task *);
+
+void sub_8087BEC(struct Task *);
+void sub_8087C14(struct Task *);
+void sub_8087CA4(struct Task *);
+void sub_8087D78(struct Task *);
+
+void sub_8087E4C(struct Task *);
+void sub_8087ED8(struct Task *);
+void sub_8087FDC(struct Task *);
+
+void sub_8088150(struct Task *);
+void sub_80881C0(struct Task *);
+void sub_8088228(struct Task *);
+void sub_80882B4(struct Task *);
+void sub_80882E4(struct Task *);
+void sub_8088338(struct Task *);
+void sub_8088380(struct Task *);
+
+void sub_80884AC(struct Task *);
+void sub_80884E8(struct Task *);
+void sub_8088554(struct Task *);
+void sub_80885A8(struct Task *);
+void sub_80885D8(struct Task *);
+void sub_808860C(struct Task *);
+void sub_808862C(struct Task *);
+
+void sub_8088984(struct Task *);
+void sub_80889E4(struct Task *);
+void sub_8088A30(struct Task *);
+void sub_8088A78(struct Task *);
+void sub_8088AF4(struct Task *);
+
+void sub_8088CA0(struct Task *);
+void sub_8088CF8(struct Task *);
+void sub_8088D3C(struct Task *);
+void sub_8088D94(struct Task *);
+void sub_8088DD8(struct Task *);
+void sub_8088E2C(struct Task *);
+void sub_8088EB4(struct Task *);
+void sub_8088F10(struct Task *);
+void sub_8088F30(struct Task *);
+
+void sub_80892A0(struct Task *);
+void sub_8089354(struct Task *);
+void sub_80893C0(struct Task *);
+void sub_8089414(struct Task *);
+void sub_808948C(struct Task *);
+void sub_80894C4(struct Task *);
+void fishE(struct Task *);
#endif // GUARD_FIELD_EFFECT_H
diff --git a/include/field_weather.h b/include/field_weather.h
index af07c970d..df216aea7 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -31,6 +31,8 @@ void sub_807D874(u8);
// ...
void sub_807DB64(u8, u8);
// ...
+void sub_807DE68(void);
+// ...
void PlayRainSoundEffect(void);
// ...
void SetSav1Weather(u32);
diff --git a/include/gba/defines.h b/include/gba/defines.h
index 0f7f06755..0f7f06755 100644..100755
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
diff --git a/include/gba/types.h b/include/gba/types.h
index fd8a20a4c..96e057ab7 100644
--- a/include/gba/types.h
+++ b/include/gba/types.h
@@ -34,7 +34,7 @@ struct PlttData
u16 g:5; // green
u16 b:5; // blue
u16 unused_15:1;
-};
+} /*__attribute__((packed))*/;
struct OamData
{
diff --git a/include/global.h b/include/global.h
index c4c78e65d..0e7c43437 100644..100755
--- a/include/global.h
+++ b/include/global.h
@@ -10,11 +10,24 @@
// to help in decompiling
#define asm_comment(x) asm volatile("@ -- " x " -- ")
+#define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided\n")
+
+#define nonmatching(fndec, x) {\
+__attribute__((naked))\
+fndec\
+{\
+ asm_unified(x);\
+}\
+}
+
#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0]))
#define POKEMON_NAME_LENGTH 10
#define OT_NAME_LENGTH 7
+#define min(a, b) (a >= b ? a : b)
+#define max(a, b) (a <= b ? a : b)
+
enum
{
VERSION_SAPPHIRE = 1,
@@ -472,10 +485,16 @@ struct GabbyAndTyData {
/*2b1b*/ u8 valB_5:3;
};
-struct RecordMixing_UnknownStruct {
+struct RecordMixing_UnknownStructSub {
u8 data[0x38];
};
+struct RecordMixing_UnknownStruct {
+ struct RecordMixing_UnknownStructSub data[2];
+ u32 unk70;
+ u16 unk74[0x2];
+};
+
struct SaveBlock1 /* 0x02025734 */
{
/*0x00*/ struct Coords16 pos;
@@ -551,8 +570,8 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2DFC*/ u8 filler_2DFC[0x8];
/*0x2E04*/ SB_Struct sbStruct;
/*0x2F9C*/ struct BoxPokemon daycareData[2];
- /*0x303C*/ struct RecordMixing_UnknownStruct filler_303C[2];
- /*0x30AC*/ u8 filler_30AC[0xA];
+ /*0x303C*/ struct RecordMixing_UnknownStruct filler_303C;
+ /*0x30AC*/ u8 filler_30B4[0x2];
/*0x30B6*/ u8 filler_30B6;
/*0x30B7*/ u8 filler_30B7[1];
/*0x30B8*/ u8 linkBattleRecords[5][16];
diff --git a/include/record_mixing.h b/include/record_mixing.h
index 72a089ca1..103f5ad64 100644
--- a/include/record_mixing.h
+++ b/include/record_mixing.h
@@ -23,11 +23,11 @@ void sub_80B9A88(u8 *a);
void sub_80B9B1C(u8 *a, size_t size, u8 index);
void sub_80B9B70(u8 *a, size_t size, u8 index);
u8 sub_80B9BBC(u16 *a);
-void sub_80B9BC4(u32 a, u32 b, u32 c, u32 d);
+void sub_80B9BC4(struct RecordMixing_UnknownStruct *, size_t, u8 [][2], u8, u8);
u8 sub_80B9C4C(u8 *a);
// ASM
-void sub_80B9C6C(void *, u32, u8, void *);
+void sub_80B9C6C(struct RecordMixing_UnknownStruct *, u32, u8, void *);
void sub_80B9F3C(void *, u8);
void sub_80BA00C(u8);
diff --git a/include/rom4.h b/include/rom4.h
index 476a0e103..9bfb9a51f 100644
--- a/include/rom4.h
+++ b/include/rom4.h
@@ -18,7 +18,7 @@ struct LinkPlayerMapObject
};
// sub_8052F5C
-// flag_var_implications_of_teleport_
+void flag_var_implications_of_teleport_(void);
void new_game(void);
void sub_8053014(void);
void sub_8053050(void);
@@ -52,7 +52,7 @@ void sub_8053570(void);
void sub_8053588(u8);
void sub_80535C4(s16 a1, s16 a2);
void sub_805363C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
-// sub_8053678
+void sub_8053678(void);
void sub_8053690(s8, s8, s8, s8, s8);
// warp1_set_to_warp2
void sub_80536E4(s8, s8, s8, s8, s8);
diff --git a/include/sprite.h b/include/sprite.h
index 13c03ab51..dd9d5efb7 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -133,7 +133,7 @@ struct Subsprite
struct SubspriteTable
{
u8 subspriteCount;
- struct Subsprite *subsprites;
+ const struct Subsprite *subsprites;
};
struct Sprite;
diff --git a/ld_script.txt b/ld_script.txt
index a2555016c..7089171dd 100644..100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -134,7 +134,6 @@ SECTIONS {
src/trainer_see.o(.text);
src/wild_encounter.o(.text);
src/field_effect.o(.text);
- asm/field_effect.o(.text);
asm/unknown_task.o(.text);
asm/pokemon_menu.o(.text);
src/option_menu.o(.text);
@@ -250,7 +249,7 @@ SECTIONS {
asm/battle_anim_812C144.o(.text);
asm/learn_move.o(.text);
src/fldeff_softboiled.o(.text);
- asm/decoration_inventory.o(.text);
+ src/decoration_inventory.o(.text);
src/roamer.o(.text);
asm/battle_tower.o(.text);
asm/use_pokeblock.o(.text);
@@ -386,7 +385,7 @@ SECTIONS {
data/trainer_see.o(.rodata);
src/wild_encounter.o(.rodata);
data/wild_encounter.o(.rodata);
- data/field_effect.o(.rodata);
+ src/field_effect.o(.rodata);
data/pokemon_menu.o(.rodata);
data/option_menu.o(.rodata);
data/pokedex.o(.rodata);
@@ -457,7 +456,7 @@ SECTIONS {
data/battle_anim_81258BC.o(.rodata);
data/battle_anim_812C144.o(.rodata);
data/learn_move.o(.rodata);
- data/decoration_inventory.o(.rodata);
+ src/decoration_inventory.o(.rodata);
src/roamer.o(.rodata);
data/battle_tower.o(.rodata);
data/use_pokeblock.o(.rodata);
diff --git a/src/daycare.c b/src/daycare.c
index 92be45cfa..381450a0b 100644..100755
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "pokemon.h"
+#include "species.h"
+#include "items.h"
#include "string_util.h"
#include "asm.h"
@@ -33,70 +35,30 @@ u8 Daycare_CountPokemon(struct BoxPokemon *daycare_data)
return count;
}
-#ifndef ASDF
-__attribute__((naked))
-void sub_8041324(struct BoxPokemon * box_pokemon, void * void_pointer)
+void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixing_UnknownStruct * void_pointer)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- mov r9, r0\n\
- mov r10, r1\n\
- movs r7, 0\n\
- movs r5, 0\n\
- mov r6, r10\n\
- adds r6, 0x74\n\
- movs r0, 0x1\n\
- mov r8, r0\n\
-_0804133E:\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 4\n\
- mov r1, r9\n\
- adds r4, r1, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0xB\n\
- bl GetBoxMonData\n\
- cmp r0, 0\n\
- beq _0804136E\n\
- adds r0, r7, 0x1\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- adds r0, r4, 0\n\
- movs r1, 0xC\n\
- bl GetBoxMonData\n\
- adds r1, r0, 0\n\
- cmp r1, 0\n\
- bne _0804136E\n\
- lsls r0, r5, 1\n\
- adds r0, r6, r0\n\
- b _08041374\n\
-_0804136E:\n\
- lsls r0, r5, 1\n\
- adds r0, r6, r0\n\
- mov r1, r8\n\
-_08041374:\n\
- strh r1, [r0]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x1\n\
- bls _0804133E\n\
- mov r0, r10\n\
- str r7, [r0, 0x70]\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
+ u8 i;
+ u8 specCount;
+ specCount = 0;
+ for (i=0; i<2; i++)
+ {
+ if (GetBoxMonData(&box_pokemon[i], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ specCount ++;
+ if (GetBoxMonData(&box_pokemon[i], MON_DATA_HELD_ITEM) == ITEM_NONE)
+ {
+ void_pointer->unk74[i] = 0;
+ } else
+ {
+ void_pointer->unk74[i] = 1;
+ }
+ } else
+ {
+ void_pointer->unk74[i] = 1;
+ }
+ }
+ void_pointer->unk70 = specCount;
}
-#endif
s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data)
{
diff --git a/src/decoration.c b/src/decoration.c
index d33931206..d33931206 100755..100644
--- a/src/decoration.c
+++ b/src/decoration.c
diff --git a/src/decoration_inventory.c b/src/decoration_inventory.c
new file mode 100644
index 000000000..6463f50dc
--- /dev/null
+++ b/src/decoration_inventory.c
@@ -0,0 +1,169 @@
+//
+// Created by Scott Norton on 6/5/17.
+//
+
+#include "global.h"
+#include "sprite.h"
+#include "task.h"
+#include "decoration.h"
+#include "decoration_inventory.h"
+
+#define DECOR_INV(ptr) {.items = (u8 *)&ptr, .size = sizeof ptr}
+
+struct DecorationInventory const gDecorationInventories[] = {
+ DECOR_INV(gSaveBlock1.decorDesk),
+ DECOR_INV(gSaveBlock1.decorChair),
+ DECOR_INV(gSaveBlock1.decorPlant),
+ DECOR_INV(gSaveBlock1.decorOrnament),
+ DECOR_INV(gSaveBlock1.decorMat),
+ DECOR_INV(gSaveBlock1.decorPoster),
+ DECOR_INV(gSaveBlock1.decorDoll),
+ DECOR_INV(gSaveBlock1.decorCushion)
+};
+
+void ClearDecorationInventory(u8 invIdx)
+{
+ u8 i;
+ for (i=0; i<gDecorationInventories[invIdx].size; i++)
+ {
+ gDecorationInventories[invIdx].items[i] = DECOR_NONE;
+ }
+}
+
+void ClearDecorationInventories(void)
+{
+ u8 i;
+ for (i=0; i<8; i++)
+ {
+ ClearDecorationInventory(i);
+ }
+}
+
+s8 sub_8133F9C(u8 invIdx)
+{
+ s8 i;
+ for (i=0; i<(s8)gDecorationInventories[invIdx].size; i++)
+ {
+ if (gDecorationInventories[invIdx].items[i] == DECOR_NONE)
+ {
+ return i;
+ }
+ }
+ return -1;
+}
+
+bool8 sub_8133FE4(u8 decorIdx)
+{
+ u8 invIdx;
+ u8 i;
+ invIdx = gDecorations[decorIdx].category;
+ for (i=0; i<gDecorationInventories[invIdx].size; i++)
+ {
+ if (gDecorationInventories[invIdx].items[i] == decorIdx)
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+bool8 IsThereStorageSpaceForDecoration(u8 decorIdx)
+{
+ u8 invIdx;
+ s8 invSlot;
+ if (decorIdx == DECOR_NONE)
+ {
+ return FALSE;
+ }
+ invIdx = gDecorations[decorIdx].category;
+ invSlot = sub_8133F9C(invIdx);
+ if (invSlot == -1)
+ {
+ return FALSE;
+ }
+ gDecorationInventories[invIdx].items[invSlot] = decorIdx;
+ return TRUE;
+}
+
+bool8 sub_8134074(u8 decorIdx)
+{
+ u8 invIdx;
+ if (decorIdx == DECOR_NONE)
+ {
+ return FALSE;
+ }
+ invIdx = gDecorations[decorIdx].category;
+ if (sub_8133F9C(invIdx) == -1)
+ {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool8 sub_81340A8(u8 decorIdx)
+{
+ u8 i;
+ u8 invIdx;
+ i = 0;
+ if (decorIdx == DECOR_NONE)
+ {
+ return FALSE;
+ }
+ for (i=0; i<gDecorationInventories[gDecorations[decorIdx].category].size; i++)
+ {
+ invIdx = gDecorations[decorIdx].category;
+ if (gDecorationInventories[invIdx].items[i] == decorIdx)
+ {
+ gDecorationInventories[invIdx].items[i] = DECOR_NONE;
+ sub_8134104(invIdx);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void sub_8134104(u8 invIdx)
+{
+ u8 i;
+ u8 j;
+ u8 tmp;
+ for (i=0; i<gDecorationInventories[invIdx].size; i++)
+ {
+ for (j=i+1; j<gDecorationInventories[invIdx].size; j++)
+ {
+ if (gDecorationInventories[invIdx].items[j] != 0 && (gDecorationInventories[invIdx].items[i] == DECOR_NONE || gDecorationInventories[invIdx].items[i] > gDecorationInventories[invIdx].items[j]))
+ {
+ tmp = gDecorationInventories[invIdx].items[i];
+ gDecorationInventories[invIdx].items[i] = gDecorationInventories[invIdx].items[j];
+ gDecorationInventories[invIdx].items[j] = tmp;
+ }
+ }
+ }
+}
+
+u8 sub_8134194(u8 invIdx)
+{
+ u8 i;
+ u8 count;
+ count = 0;
+ for (i=0; i<gDecorationInventories[invIdx].size; i++)
+ {
+ if (gDecorationInventories[invIdx].items[i] != 0)
+ {
+ count++;
+ }
+ }
+ return count;
+}
+
+u8 sub_81341D4(void)
+{
+ u8 i;
+ u8 count;
+ count = 0;
+ for (i=0; i<8; i++)
+ {
+ count += sub_8134194(i);
+ }
+ return count;
+}
diff --git a/src/field_effect.c b/src/field_effect.c
index bbc1144c1..2bf9b3dc9 100644..100755
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -1,17 +1,423 @@
#include "global.h"
-#include "field_effect.h"
+#include "asm.h"
+#include "data2.h"
+#include "script.h"
+#include "trig.h"
+#include "main.h"
#include "field_weather.h"
+#include "decompress.h"
#include "sprite.h"
+#include "menu.h"
+#include "palette.h"
#include "text.h"
+#include "rom4.h"
+#include "task.h"
+#include "sound.h"
+#include "songs.h"
+#include "decoration.h"
+#include "field_player_avatar.h"
+#include "field_map_obj_helpers.h"
+#include "field_map_obj.h"
+#include "metatile_behavior.h"
+#include "field_camera.h"
+#include "field_effect.h"
+
+#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))}
+
+#define obj_frame_tiles(ptr) {.data = (u8 *)ptr, .size = sizeof ptr}
+
+const u32 gSpriteImage_839DC14[] = INCBIN_U32("graphics/birch_speech/birch.4bpp");
+const u16 gBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal");
+const u32 gSpriteImage_839E434[] = INCBIN_U32("graphics/misc/pokeball_glow.4bpp");
+const u16 gFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/field_effect_objects/palettes/04.gbapal");
+const u32 gSpriteImage_839E474[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp");
+const u32 gSpriteImage_839E534[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp");
+const u32 gSpriteImage_839E5F4[] = INCBIN_U32("graphics/misc/big_hof_monitor.4bpp");
+const u32 gSpriteImage_839E7F4[] = INCBIN_U32("graphics/misc/small_hof_monitor.4bpp");
+const u16 gFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/field_effect_objects/palettes/05.gbapal");
+
+// Graphics for the lights streaking past your Pokemon when it uses a field move.
+const u32 gFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/field_move_streaks.4bpp");
+const u16 gFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/field_move_streaks.gbapal");
+const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/field_move_streaks_map.bin");
+
+// The following light streaks effect is used when the map is dark (e.g. a cave).
+const u32 gDarknessFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/darkness_field_move_streaks.4bpp");
+const u16 gDarknessFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/darkness_field_move_streaks.gbapal");
+const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/darkness_field_move_streaks_map.bin");
+
+bool8 (*const gFieldEffectScriptFuncs[])(u8 **, u32 *) = {
+ FieldEffectCmd_loadtiles,
+ FieldEffectCmd_loadfadedpal,
+ FieldEffectCmd_loadpal,
+ FieldEffectCmd_callnative,
+ FieldEffectCmd_end,
+ FieldEffectCmd_loadgfx_callnative,
+ FieldEffectCmd_loadtiles_callnative,
+ FieldEffectCmd_loadfadedpal_callnative,
+};
+
+const struct OamData gOamData_839F0F4 = {.size = 3};
+const struct OamData gOamData_839F0FC = {.size = 0};
+const struct OamData gOamData_839F104 = {.size = 1};
+
+const struct SpriteFrameImage gSpriteImageTable_839F10C[] = {
+ obj_frame_tiles(gSpriteImage_839DC14)
+};
+const struct SpritePalette gUnknown_0839F114 = {.data = gBirchPalette, .tag = 0x1006};
+
+const union AnimCmd gSpriteAnim_839F11C[] = {
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 1),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_839F124[] = {
+ gSpriteAnim_839F11C
+};
+
+const struct SpriteTemplate gSpriteTemplate_839F128 = {
+ .tileTag = 0xffff,
+ .paletteTag = 4102,
+ .oam = &gOamData_839F0F4,
+ .anims = (const union AnimCmd *const *)&gSpriteAnimTable_839F124,
+ .images = gSpriteImageTable_839F10C,
+ .affineAnims = (const union AffineAnimCmd *const *)&gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+const struct SpritePalette gFieldEffectObjectPaletteInfo4 = {.data = gFieldEffectObjectPalette4, .tag = 0x1007};
+const struct SpritePalette gFieldEffectObjectPaletteInfo5 = {.data = gFieldEffectObjectPalette5, .tag = 0x1010};
+const struct OamData gOamData_839F150 = {
+ .shape = 1,
+ .size = 2
+};
+
+const struct SpriteFrameImage gSpriteImageTable_839F158[] = {
+ obj_frame_tiles(gSpriteImage_839E434)
+};
+
+const struct SpriteFrameImage gSpriteImageTable_839F160[] = {
+ obj_frame_tiles(gSpriteImage_839E474),
+ obj_frame_tiles(gSpriteImage_839E534)
+};
+
+const struct SpriteFrameImage gSpriteImageTable_839F170[] = {
+ obj_frame_tiles(gSpriteImage_839E5F4)
+};
+
+const struct SpriteFrameImage gSpriteImageTable_839F178[] = {
+ {.data = (u8 *)gSpriteImage_839E7F4, .size = 0x200} // the macro breaks down here
+};
+
+const struct Subsprite Unknown_39F180[] = {
+ {.x = -12, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 0},
+ {.x = 4, .y = -8, .priority = 2, .tileOffset = 2, .shape = 0, .size = 0},
+ {.x = -12, .y = 0, .priority = 2, .tileOffset = 3, .shape = 1, .size = 0},
+ {.x = 4, .y = 0, .priority = 2, .tileOffset = 5, .shape = 0, .size = 0}
+};
+
+const struct SubspriteTable gUnknown_0839F1A0 = subsprite_table(Unknown_39F180);
+
+const struct Subsprite Unknown_39F1A8[] = {
+ {.x = -32, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 1},
+ {.x = 0, .y = -8, .priority = 2, .tileOffset = 4, .shape = 1, .size = 1},
+ {.x = -32, .y = 0, .priority = 2, .tileOffset = 8, .shape = 1, .size = 1},
+ {.x = 0, .y = 0, .priority = 2, .tileOffset = 12, .shape = 1, .size = 1}
+};
+
+const struct SubspriteTable gUnknown_0839F1C8 = subsprite_table(Unknown_39F1A8);
+
+const union AnimCmd gSpriteAnim_839F1D0[] = {
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 1),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd gSpriteAnim_839F1D8[] = {
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_839F1FC[] = {
+ gSpriteAnim_839F1D0,
+ gSpriteAnim_839F1D8
+};
+
+const union AnimCmd *const gSpriteAnimTable_839F204[] = {
+ gSpriteAnim_839F1D0
+};
+
+const struct SpriteTemplate gSpriteTemplate_839F208 = {
+ .tileTag = 0xffff,
+ .paletteTag = 4103,
+ .oam = &gOamData_839F0FC,
+ .anims = gSpriteAnimTable_839F1FC,
+ .images = gSpriteImageTable_839F158,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PokeballGlow
+};
+
+
+const struct SpriteTemplate gSpriteTemplate_839F220 = {
+ .tileTag = 0xffff,
+ .paletteTag = 4100,
+ .oam = &gOamData_839F104,
+ .anims = gSpriteAnimTable_839F1FC,
+ .images = gSpriteImageTable_839F160,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PokecenterMonitor
+};
+
+
+const struct SpriteTemplate gSpriteTemplate_839F238 = {
+ .tileTag = 0xffff,
+ .paletteTag = 4112,
+ .oam = &gOamData_839F104,
+ .anims = gSpriteAnimTable_839F204,
+ .images = gSpriteImageTable_839F170,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_HallOfFameMonitor
+};
+
+
+const struct SpriteTemplate gSpriteTemplate_839F250 = {
+ .tileTag = 0xffff,
+ .paletteTag = 4112,
+ .oam = &gOamData_839F150,
+ .anims = gSpriteAnimTable_839F204,
+ .images = gSpriteImageTable_839F178,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_HallOfFameMonitor
+};
+
+void (*const gUnknown_0839F268[])(struct Task *) = {
+ PokecenterHealEffect_0,
+ PokecenterHealEffect_1,
+ PokecenterHealEffect_2,
+ PokecenterHealEffect_3
+};
-typedef bool8 (*FldEffCmd)(u8 **, u32 *);
+void (*const gUnknown_0839F278[])(struct Task *) = {
+ HallOfFameRecordEffect_0,
+ HallOfFameRecordEffect_1,
+ HallOfFameRecordEffect_2,
+ HallOfFameRecordEffect_3
+};
+
+void (*const gUnknown_0839F288[])(struct Sprite *) = {
+ PokeballGlowEffect_0,
+ PokeballGlowEffect_1,
+ PokeballGlowEffect_2,
+ PokeballGlowEffect_3,
+ PokeballGlowEffect_4,
+ PokeballGlowEffect_5,
+ PokeballGlowEffect_6,
+ PokeballGlowEffect_7
+};
+
+const struct Coords16 gUnknown_0839F2A8[] = {
+ {.x = 0, .y = 0},
+ {.x = 6, .y = 0},
+ {.x = 0, .y = 4},
+ {.x = 6, .y = 4},
+ {.x = 0, .y = 8},
+ {.x = 6, .y = 8}
+};
+
+const u8 gUnknown_0839F2C0[] = {16, 12, 8, 0};
+const u8 gUnknown_0839F2C4[] = {16, 12, 8, 0};
+const u8 gUnknown_0839F2C8[] = { 0, 0, 0, 0};
+
+bool8 (*const gUnknown_0839F2CC[])(struct Task *) = {
+ sub_80867AC,
+ sub_8086854,
+ sub_8086870,
+ sub_80868E4,
+ sub_808699C,
+ sub_80869B8,
+ sub_80869F8
+};
+
+bool8 (*const gUnknown_0839F2E8[])(struct Task *) = {
+ sub_8086AA0,
+ sub_8086AC0,
+ sub_8086B30,
+ sub_8086B54,
+ sub_8086B64,
+ sub_8086B88
+};
+
+bool8 (*const gUnknown_0839F300[])(struct Task *) = {
+ sub_8086CF4,
+ sub_8086D70,
+ sub_8086DB0,
+ sub_8086E10,
+ sub_8086E50,
+ sub_8086EB0,
+ sub_8086ED4
+};
+
+bool8 (*const gUnknown_0839F31C[])(struct Task *, struct MapObject *) = {
+ sub_8086FB0,
+ waterfall_1_do_anim_probably,
+ waterfall_2_wait_anim_finish_probably,
+ sub_8087030,
+ sub_8087058
+};
+
+bool8 (*const gUnknown_0839F330[])(struct Task *) = {
+ sub_8087124,
+ dive_2_unknown,
+ dive_3_unknown
+};
+
+bool8 (*const gUnknown_0839F33C[])(struct Task *, struct MapObject *, struct Sprite *) = {
+ sub_808722C,
+ sub_8087264,
+ sub_8087298,
+ sub_80872E4,
+ sub_80873D8,
+ sub_80873F4
+};
+
+bool8 (*const gUnknown_0839F354[])(struct Task *, struct MapObject *, struct Sprite *) = {
+ sub_80874CC,
+ sub_80874FC,
+ sub_8087548,
+ sub_808759C
+};
+
+bool8 (*const gUnknown_0839F364[])(struct Task *, struct MapObject *, struct Sprite *) = {
+ sub_80876C8,
+ sub_80876F8,
+ sub_8087774,
+ sub_80877AC,
+ sub_80877D4
+};
+
+void (*const gUnknown_0839F378[])(struct Task *) = {
+ sub_80878F4,
+ sub_8087914
+};
+
+const u8 gUnknown_0839F380[] = {1, 3, 4, 2, 1};
+
+void (*const gUnknown_0839F388[])(struct Task *) = {
+ sub_8087AA4,
+ sub_8087AC8
+};
+
+void (*const gUnknown_0839F390[])(struct Task *) = {
+ sub_8087BEC,
+ sub_8087C14,
+ sub_8087CA4,
+ sub_8087D78
+};
+
+void (*const gUnknown_0839F3A0[])(struct Task *) = {
+ sub_8087E4C,
+ sub_8087ED8,
+ sub_8087FDC
+};
+
+void (*const gUnknown_0839F3AC[])(struct Task *) = {
+ sub_8088150,
+ sub_80881C0,
+ sub_8088228,
+ sub_80882B4,
+ sub_80882E4,
+ sub_8088338,
+ sub_8088380
+};
+
+void (*const gUnknown_0839F3C8[])(struct Task *) = {
+ sub_80884AC,
+ sub_80884E8,
+ sub_8088554,
+ sub_80885A8,
+ sub_80885D8,
+ sub_808860C,
+ sub_808862C
+};
+
+void (*const gUnknown_0839F3E4[])(struct Task *) = {
+ sub_8088984,
+ sub_80889E4,
+ sub_8088A30,
+ sub_8088A78,
+ sub_8088AF4
+};
+
+void (*const gUnknown_0839F3F8[])(struct Task *) = {
+ sub_8088CA0,
+ sub_8088CF8,
+ sub_8088D3C,
+ sub_8088D94,
+ sub_8088DD8,
+ sub_8088E2C,
+ sub_8088EB4,
+ sub_8088F10,
+ sub_8088F30
+};
+
+const union AffineAnimCmd SpriteAffineAnim_839F41C[] = {
+ AFFINEANIMCMD_FRAME(8, 8, -30, 0),
+ AFFINEANIMCMD_FRAME(28, 28, 0, 30),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd SpriteAffineAnim_839F434[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 64, 0),
+ AFFINEANIMCMD_FRAME(-10, -10, 0, 22),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_0839F44C[] = {
+ SpriteAffineAnim_839F41C,
+ SpriteAffineAnim_839F434
+};
+
+void (*const gUnknown_0839F454[])(struct Task *) = {
+ sub_80892A0,
+ sub_8089354,
+ sub_80893C0,
+ sub_8089414,
+ sub_808948C,
+ sub_80894C4,
+ fishE
+};
+
+const s16 gUnknown_0839F470[] = {
+ -2,
+ -4,
+ -5,
+ -6,
+ -7,
+ -8,
+ -8,
+ -8,
+ -7,
+ -7,
+ -6,
+ -5,
+ -3,
+ -2,
+ 0,
+ 2,
+ 4,
+ 8
+};
static u8 sActiveList[32];
extern u8 *gFieldEffectScriptPointers[];
-extern FldEffCmd gFieldEffectScriptFuncs[];
-
u32 FieldEffectStart(u8 id)
{
u8 *script;
@@ -207,3 +613,2789 @@ bool8 FieldEffectActiveListContains(u8 id)
return TRUE;
return FALSE;
}
+
+u8 CreateTrainerSprite_BirchSpeech(u8 gender, s16 x, s16 y, u8 subpriority, u8 *buffer)
+{
+ struct SpriteTemplate spriteTemplate;
+ LoadCompressedObjectPaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[gender], buffer);
+ LoadCompressedObjectPicOverrideBuffer(&gTrainerFrontPicTable[gender], buffer);
+ spriteTemplate.tileTag = gTrainerFrontPicTable[gender].tag;
+ spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[gender].tag;
+ spriteTemplate.oam = &gOamData_839F0F4;
+ spriteTemplate.anims = gDummySpriteAnimTable;
+ spriteTemplate.images = NULL;
+ spriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ spriteTemplate.callback = SpriteCallbackDummy;
+ return CreateSprite(&spriteTemplate, x, y, subpriority);
+}
+
+void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest)
+{
+ LZDecompressVram(gTrainerFrontPicTable[gender].data, dest);
+ LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, 0x20);
+}
+
+u8 CreateBirchSprite(s16 x, s16 y, u8 subpriority)
+{
+ LoadSpritePalette(&gUnknown_0839F114);
+ return CreateSprite(&gSpriteTemplate_839F128, x, y, subpriority);
+}
+
+u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
+{
+ DecompressPicFromTable_2(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gUnknown_081FAF4C[3], gUnknown_081FAF4C[3], species);
+ LoadCompressedObjectPalette(&gMonPaletteTable[species]);
+ GetMonSpriteTemplate_803C56C(species, 3);
+ gUnknown_02024E8C.paletteTag = gMonPaletteTable[0].tag;
+ sub_807DE38(IndexOfSpritePaletteTag(gMonPaletteTable[0].tag) + 0x10);
+ return CreateSprite(&gUnknown_02024E8C, x, y, subpriority);
+}
+
+u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority)
+{
+ const struct SpritePalette *spritePalette;
+ HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gUnknown_081FAF4C[3] /* this is actually u8* or something, pointing to ewram */, gUnknown_081FAF4C[3], species, g);
+ spritePalette = sub_80409C8(species, d, g);
+ LoadCompressedObjectPalette(spritePalette);
+ GetMonSpriteTemplate_803C56C(species, 3);
+ gUnknown_02024E8C.paletteTag = spritePalette->tag;
+ sub_807DE38(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
+ return CreateSprite(&gUnknown_02024E8C, x, y, subpriority);
+}
+
+void FreeResourcesAndDestroySprite(struct Sprite *sprite)
+{
+ sub_807DE68();
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
+ if (sprite->oam.affineMode != 0)
+ {
+ FreeOamMatrix(sprite->oam.matrixNum);
+ }
+ DestroySprite(sprite);
+}
+
+#ifdef NONMATCHING
+void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
+{
+ int curRed;
+ int curGreen;
+ int curBlue;
+
+ curRed = gPlttBufferUnfaded[i] & 0x1f;
+ curGreen = (gPlttBufferUnfaded[i] & (0x1f << 5)) >> 5;
+ curBlue = (gPlttBufferUnfaded[i] & (0x1f << 10)) >> 10;
+ curRed += (((0x1f - curRed) * r) >> 4);
+ curGreen += (((0x1f - curGreen) * g) >> 4);
+ curBlue += (((0x1f - curBlue) * b) >> 4);
+ gPlttBufferFaded[i] = RGB(curRed, curGreen, curBlue);
+}
+
+void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
+{
+ int curRed;
+ int curGreen;
+ int curBlue;
+
+ curRed = gPlttBufferUnfaded[i] & 0x1f;
+ curGreen = (gPlttBufferUnfaded[i] & (0x1f << 5)) >> 5;
+ curBlue = (gPlttBufferUnfaded[i] & (0x1f << 10)) >> 10;
+ curRed -= ((curRed * r) >> 4);
+ curGreen -= ((curGreen * g) >> 4);
+ curBlue -= ((curBlue * b) >> 4);
+ gPlttBufferFaded[i] = RGB(curRed, curGreen, curBlue);
+}
+#else
+__attribute__((naked))
+void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
+{
+ asm(".syntax unified\n"
+ "\tpush {r4-r7,lr}\n"
+ "\tmov r7, r9\n"
+ "\tmov r6, r8\n"
+ "\tpush {r6,r7}\n"
+ "\tlsls r0, 16\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r2, 24\n"
+ "\tlsls r3, 24\n"
+ "\tlsrs r3, 24\n"
+ "\tldr r4, _08085D00 @ =gPlttBufferUnfaded\n"
+ "\tlsrs r0, 15\n"
+ "\tadds r4, r0, r4\n"
+ "\tldrh r4, [r4]\n"
+ "\tmovs r5, 0x1F\n"
+ "\tmov r9, r5\n"
+ "\tmov r8, r4\n"
+ "\tmov r6, r8\n"
+ "\tands r6, r5\n"
+ "\tmov r8, r6\n"
+ "\tmovs r6, 0xF8\n"
+ "\tlsls r6, 2\n"
+ "\tands r6, r4\n"
+ "\tlsrs r6, 5\n"
+ "\tmovs r5, 0xF8\n"
+ "\tlsls r5, 7\n"
+ "\tands r4, r5\n"
+ "\tlsrs r4, 10\n"
+ "\tmov r7, r9\n"
+ "\tmov r5, r8\n"
+ "\tsubs r7, r5\n"
+ "\tmov r12, r7\n"
+ "\tmov r7, r12\n"
+ "\tmuls r7, r1\n"
+ "\tadds r1, r7, 0\n"
+ "\tasrs r1, 4\n"
+ "\tadd r8, r1\n"
+ "\tmov r5, r9\n"
+ "\tsubs r1, r5, r6\n"
+ "\tmuls r1, r2\n"
+ "\tasrs r1, 4\n"
+ "\tadds r6, r1\n"
+ "\tsubs r5, r4\n"
+ "\tmov r9, r5\n"
+ "\tmov r1, r9\n"
+ "\tmuls r1, r3\n"
+ "\tasrs r1, 4\n"
+ "\tadds r4, r1\n"
+ "\tmov r7, r8\n"
+ "\tlsls r7, 16\n"
+ "\tlsls r6, 21\n"
+ "\torrs r6, r7\n"
+ "\tlsls r4, 26\n"
+ "\torrs r4, r6\n"
+ "\tlsrs r4, 16\n"
+ "\tldr r1, _08085D04 @ =gPlttBufferFaded\n"
+ "\tadds r0, r1\n"
+ "\tstrh r4, [r0]\n"
+ "\tpop {r3,r4}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_08085D00: .4byte gPlttBufferUnfaded\n"
+ "_08085D04: .4byte gPlttBufferFaded\n"
+ ".syntax divided");
+}
+
+__attribute__((naked))
+void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
+{
+ asm(".syntax unified\n"
+ "\tpush {r4-r6,lr}\n"
+ "\tmov r6, r8\n"
+ "\tpush {r6}\n"
+ "\tlsls r0, 16\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r2, 24\n"
+ "\tlsls r3, 24\n"
+ "\tlsrs r3, 24\n"
+ "\tldr r4, _08085D78 @ =gPlttBufferUnfaded\n"
+ "\tlsrs r0, 15\n"
+ "\tadds r4, r0, r4\n"
+ "\tldrh r4, [r4]\n"
+ "\tmovs r5, 0x1F\n"
+ "\tmov r8, r5\n"
+ "\tmov r6, r8\n"
+ "\tands r6, r4\n"
+ "\tmov r8, r6\n"
+ "\tmovs r5, 0xF8\n"
+ "\tlsls r5, 2\n"
+ "\tands r5, r4\n"
+ "\tlsrs r5, 5\n"
+ "\tmovs r6, 0xF8\n"
+ "\tlsls r6, 7\n"
+ "\tands r4, r6\n"
+ "\tlsrs r4, 10\n"
+ "\tmov r6, r8\n"
+ "\tmuls r6, r1\n"
+ "\tadds r1, r6, 0\n"
+ "\tasrs r1, 4\n"
+ "\tmov r6, r8\n"
+ "\tsubs r6, r1\n"
+ "\tadds r1, r5, 0\n"
+ "\tmuls r1, r2\n"
+ "\tasrs r1, 4\n"
+ "\tsubs r5, r1\n"
+ "\tadds r1, r4, 0\n"
+ "\tmuls r1, r3\n"
+ "\tasrs r1, 4\n"
+ "\tsubs r4, r1\n"
+ "\tlsls r6, 16\n"
+ "\tlsls r5, 21\n"
+ "\torrs r5, r6\n"
+ "\tlsls r4, 26\n"
+ "\torrs r4, r5\n"
+ "\tlsrs r4, 16\n"
+ "\tldr r1, _08085D7C @ =gPlttBufferFaded\n"
+ "\tadds r0, r1\n"
+ "\tstrh r4, [r0]\n"
+ "\tpop {r3}\n"
+ "\tmov r8, r3\n"
+ "\tpop {r4-r6}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_08085D78: .4byte gPlttBufferUnfaded\n"
+ "_08085D7C: .4byte gPlttBufferFaded\n"
+ ".syntax divided");
+}
+#endif
+
+void Task_PokecenterHeal(u8 taskId);
+u8 CreatePokeballGlowSprite(s16, s16, s16, u16);
+u8 PokecenterHealEffectHelper(s16, s16);
+
+bool8 FldEff_PokecenterHeal(void)
+{
+ u8 nPokemon;
+ struct Task *task;
+
+ nPokemon = CalculatePlayerPartyCount();
+ task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)];
+ task->data[1] = nPokemon;
+ task->data[2] = 0x5d;
+ task->data[3] = 0x24;
+ task->data[4] = 0x7c;
+ task->data[5] = 0x18;
+ return FALSE;
+}
+
+void Task_PokecenterHeal(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ gUnknown_0839F268[task->data[0]](task);
+}
+
+void PokecenterHealEffect_0(struct Task *task)
+{
+ task->data[0]++;
+ task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 1);
+ task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]);
+}
+
+void PokecenterHealEffect_1(struct Task *task)
+{
+ if (gSprites[task->data[6]].data0 > 1)
+ {
+ gSprites[task->data[7]].data0++;
+ task->data[0]++;
+ }
+}
+
+void PokecenterHealEffect_2(struct Task *task)
+{
+ if (gSprites[task->data[6]].data0 > 4)
+ {
+ task->data[0]++;
+ }
+}
+
+void PokecenterHealEffect_3(struct Task *task)
+{
+ if (gSprites[task->data[6]].data0 > 6)
+ {
+ DestroySprite(&gSprites[task->data[6]]);
+ FieldEffectActiveListRemove(FLDEFF_POKECENTER_HEAL);
+ DestroyTask(FindTaskIdByFunc(Task_PokecenterHeal));
+ }
+}
+
+void Task_HallOfFameRecord(u8 taskId);
+void HallOfFameRecordEffectHelper(s16, s16, s16, u8);
+
+bool8 FldEff_HallOfFameRecord(void)
+{
+ u8 nPokemon;
+ struct Task *task;
+
+ nPokemon = CalculatePlayerPartyCount();
+ task = &gTasks[CreateTask(Task_HallOfFameRecord, 0xff)];
+ task->data[1] = nPokemon;
+ task->data[2] = 0x75;
+ task->data[3] = 0x34;
+ return FALSE;
+}
+
+void Task_HallOfFameRecord(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ gUnknown_0839F278[task->data[0]](task);
+}
+
+void HallOfFameRecordEffect_0(struct Task *task)
+{
+ u8 taskId;
+ task->data[0]++;
+ task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 0);
+ taskId = FindTaskIdByFunc(Task_HallOfFameRecord);
+ HallOfFameRecordEffectHelper(taskId, 0x78, 0x18, 0);
+ HallOfFameRecordEffectHelper(taskId, 0x28, 0x08, 1);
+ HallOfFameRecordEffectHelper(taskId, 0x48, 0x08, 1);
+ HallOfFameRecordEffectHelper(taskId, 0xa8, 0x08, 1);
+ HallOfFameRecordEffectHelper(taskId, 0xc8, 0x08, 1);
+}
+
+void HallOfFameRecordEffect_1(struct Task *task)
+{
+ if (gSprites[task->data[6]].data0 > 1)
+ {
+ task->data[15]++; // was this ever initialized? is this ever used?
+ task->data[0]++;
+ }
+}
+
+void HallOfFameRecordEffect_2(struct Task *task)
+{
+ if (gSprites[task->data[6]].data0 > 4)
+ {
+ task->data[0]++;
+ }
+}
+
+void HallOfFameRecordEffect_3(struct Task *task)
+{
+ if (gSprites[task->data[6]].data0 > 6)
+ {
+ DestroySprite(&gSprites[task->data[6]]);
+ FieldEffectActiveListRemove(FLDEFF_HALL_OF_FAME_RECORD);
+ DestroyTask(FindTaskIdByFunc(Task_HallOfFameRecord));
+ }
+}
+
+void SpriteCB_PokeballGlowEffect(struct Sprite *);
+
+u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+ spriteId = CreateInvisibleSprite(SpriteCB_PokeballGlowEffect);
+ sprite = &gSprites[spriteId];
+ sprite->pos2.x = x;
+ sprite->pos2.y = y;
+ sprite->data5 = data5;
+ sprite->data6 = data6;
+ sprite->data7 = spriteId;
+ return spriteId;
+}
+
+void SpriteCB_PokeballGlowEffect(struct Sprite *sprite)
+{
+ gUnknown_0839F288[sprite->data0](sprite);
+}
+
+void PokeballGlowEffect_0(struct Sprite *sprite)
+{
+ u8 endSpriteId;
+ if (sprite->data1 == 0 || (--sprite->data1) == 0)
+ {
+ sprite->data1 = 25;
+ endSpriteId = CreateSpriteAtEnd(&gSpriteTemplate_839F208, gUnknown_0839F2A8[sprite->data2].x + sprite->pos2.x, gUnknown_0839F2A8[sprite->data2].y + sprite->pos2.y, 0);
+ gSprites[endSpriteId].oam.priority = 2;
+ gSprites[endSpriteId].data0 = sprite->data7;
+ sprite->data2++;
+ sprite->data6--;
+ PlaySE(SE_BOWA);
+ }
+ if (sprite->data6 == 0)
+ {
+ sprite->data1 = 32;
+ sprite->data0++;
+ }
+}
+
+void PokeballGlowEffect_1(struct Sprite *sprite)
+{
+ if ((--sprite->data1) == 0)
+ {
+ sprite->data0++;
+ sprite->data1 = 8;
+ sprite->data2 = 0;
+ sprite->data3 = 0;
+ if (sprite->data5)
+ {
+ PlayFanfare(BGM_ME_ASA);
+ }
+ }
+}
+
+void PokeballGlowEffect_2(struct Sprite *sprite)
+{
+ u8 phase;
+ if ((--sprite->data1) == 0)
+ {
+ sprite->data1 = 8;
+ sprite->data2++;
+ sprite->data2 &= 3;
+ if (sprite->data2 == 0)
+ {
+ sprite->data3++;
+ }
+ }
+ phase = (sprite->data2 + 3) & 3;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
+ phase = (sprite->data2 + 2) & 3;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
+ phase = (sprite->data2 + 1) & 3;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
+ phase = sprite->data2;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
+ if (sprite->data3 > 2)
+ {
+ sprite->data0++;
+ sprite->data1 = 8;
+ sprite->data2 = 0;
+ }
+}
+
+void PokeballGlowEffect_3(struct Sprite *sprite)
+{
+ u8 phase;
+ if ((--sprite->data1) == 0)
+ {
+ sprite->data1 = 8;
+ sprite->data2++;
+ sprite->data2 &= 3;
+ if (sprite->data2 == 3)
+ {
+ sprite->data0++;
+ sprite->data1 = 30;
+ }
+ }
+ phase = sprite->data2;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]);
+}
+
+void PokeballGlowEffect_4(struct Sprite *sprite)
+{
+ if ((--sprite->data1) == 0)
+ {
+ sprite->data0++;
+ }
+}
+
+void PokeballGlowEffect_5(struct Sprite *sprite)
+{
+ sprite->data0++;
+}
+
+void PokeballGlowEffect_6(struct Sprite *sprite)
+{
+ if (sprite->data5 == 0 || IsFanfareTaskInactive())
+ {
+ sprite->data0++;
+ }
+}
+
+void PokeballGlowEffect_7(struct Sprite *sprite)
+{
+}
+
+void SpriteCB_PokeballGlow(struct Sprite *sprite)
+{
+ if (gSprites[sprite->data0].data0 > 4)
+ {
+ FieldEffectFreeGraphicsResources(sprite);
+ }
+}
+
+u8 PokecenterHealEffectHelper(s16 x, s16 y)
+{
+ u8 spriteIdAtEnd;
+ struct Sprite *sprite;
+ spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F220, x, y, 0);
+ sprite = &gSprites[spriteIdAtEnd];
+ sprite->oam.priority = 2;
+ sprite->invisible = 1;
+ SetSubspriteTables(sprite, &gUnknown_0839F1A0);
+ return spriteIdAtEnd;
+}
+
+void SpriteCB_PokecenterMonitor(struct Sprite *sprite)
+{
+ if (sprite->data0 != 0)
+ {
+ sprite->data0 = 0;
+ sprite->invisible = 0;
+ StartSpriteAnim(sprite, 1);
+ }
+ if (sprite->animEnded)
+ {
+ FieldEffectFreeGraphicsResources(sprite);
+ }
+}
+
+void HallOfFameRecordEffectHelper(s16 a0, s16 a1, s16 a2, u8 a3)
+{
+ u8 spriteIdAtEnd;
+ if (!a3)
+ {
+ spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F238, a1, a2, 0);
+ SetSubspriteTables(&gSprites[spriteIdAtEnd], &gUnknown_0839F1C8);
+ } else
+ {
+ spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F250, a1, a2, 0);
+ }
+ gSprites[spriteIdAtEnd].invisible = 1;
+ gSprites[spriteIdAtEnd].data0 = a0;
+}
+
+void SpriteCB_HallOfFameMonitor(struct Sprite *sprite)
+{
+ if (gTasks[sprite->data0].data[15])
+ {
+ if (sprite->data1 == 0 || (--sprite->data1) == 0)
+ {
+ sprite->data1 = 16;
+ sprite->invisible ^= 1;
+ }
+ sprite->data2++;
+ }
+ if (sprite->data2 > 127)
+ {
+ FieldEffectFreeGraphicsResources(sprite);
+ }
+}
+
+void mapldr_080842E8(void);
+void mapldr_08084390(void);
+void task00_8084310(u8);
+void c3_080843F8(u8);
+
+void sub_80865BC(void)
+{
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+ gUnknown_0300485C = mapldr_080842E8;
+}
+
+void mapldr_080842E8(void)
+{
+ pal_fill_black();
+ CreateTask(task00_8084310, 0);
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ gUnknown_0300485C = NULL;
+}
+
+void task00_8084310(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ if (!task->data[0])
+ {
+ if (!sub_807D770())
+ {
+ return;
+ }
+ gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
+ if ((int)gUnknown_0202FF84[0] > 5)
+ {
+ gUnknown_0202FF84[0] = 0;
+ }
+ FieldEffectStart(FLDEFF_USE_FLY);
+ task->data[0]++;
+ }
+ if (!FieldEffectActiveListContains(FLDEFF_USE_FLY))
+ {
+ flag_var_implications_of_teleport_();
+ warp_in();
+ SetMainCallback2(CB2_LoadMap);
+ gUnknown_0300485C = mapldr_08084390;
+ DestroyTask(taskId);
+ }
+}
+
+void mapldr_08084390(void)
+{
+ sub_8053E90();
+ pal_fill_black();
+ CreateTask(c3_080843F8, 0);
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1;
+ if (gPlayerAvatar.flags & 0x08)
+ {
+ FieldObjectTurn(&gMapObjects[gPlayerAvatar.mapObjectId], DIR_WEST);
+ }
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ gUnknown_0300485C = NULL;
+}
+
+void c3_080843F8(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ if (task->data[0] == 0)
+ {
+ if (gPaletteFade.active)
+ {
+ return;
+ }
+ FieldEffectStart(FLDEFF_FLY_IN);
+ task->data[0]++;
+ }
+ if (!FieldEffectActiveListContains(FLDEFF_FLY_IN))
+ {
+ ScriptContext2_Disable();
+ UnfreezeMapObjects();
+ DestroyTask(taskId);
+ }
+}
+
+extern void pal_fill_for_map_transition(void);
+void sub_8086774(u8);
+extern void CameraObjectReset2(void);
+extern void CameraObjectReset1(void);
+
+void sub_8086748(void)
+{
+ sub_8053E90();
+ pal_fill_for_map_transition();
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ CreateTask(sub_8086774, 0);
+ gUnknown_0300485C = NULL;
+}
+
+void sub_8086774(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ while (gUnknown_0839F2CC[task->data[0]](task)); // return code signifies whether to continue blocking here
+}
+
+bool8 sub_80867AC(struct Task *task) // gUnknown_0839F2CC[0]
+{
+ struct MapObject *playerObject;
+ struct Sprite *playerSprite;
+ playerObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ playerSprite = &gSprites[gPlayerAvatar.spriteId];
+ CameraObjectReset2();
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1;
+ gPlayerAvatar.unk6 = 1;
+ FieldObjectSetSpecialAnim(playerObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble()));
+ task->data[4] = playerSprite->subspriteMode;
+ playerObject->mapobj_bit_26 = 1;
+ playerSprite->oam.priority = 1;
+ playerSprite->subspriteMode = 2;
+ task->data[0]++;
+ return TRUE;
+}
+
+bool8 sub_8086854(struct Task *task) // gUnknown_0839F2CC[1]
+{
+ if (sub_807D770())
+ {
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_8086870(struct Task *task) // gUnknown_0839F2CC[2]
+{
+ struct Sprite *sprite;
+ s16 centerToCornerVecY;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
+ sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY);
+ task->data[1] = 1;
+ task->data[2] = 0;
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 0;
+ PlaySE(SE_RU_HYUU);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_80868E4(struct Task *task)
+{
+ struct MapObject *mapObject;
+ struct Sprite *sprite;
+
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.y += task->data[1];
+ if (task->data[1] < 8)
+ {
+ task->data[2] += task->data[1];
+ if (task->data[2] & 0xf)
+ {
+ task->data[1] <<= 1;
+ }
+ }
+ if (task->data[3] == 0 && sprite->pos2.y >= -16)
+ {
+ task->data[3]++;
+ mapObject->mapobj_bit_26 = 0;
+ sprite->subspriteMode = task->data[4];
+ mapObject->mapobj_bit_2 = 1;
+ }
+ if (sprite->pos2.y >= 0)
+ {
+ PlaySE(SE_W070);
+ mapObject->mapobj_bit_3 = 1;
+ mapObject->mapobj_bit_5 = 1;
+ sprite->pos2.y = 0;
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_808699C(struct Task *task)
+{
+ task->data[0]++;
+ task->data[1] = 4;
+ task->data[2] = 0;
+ SetCameraPanningCallback(NULL);
+ return TRUE;
+}
+
+bool8 sub_80869B8(struct Task *task)
+{
+ SetCameraPanning(0, task->data[1]);
+ task->data[1] = -task->data[1];
+ task->data[2]++;
+ if ((task->data[2] & 3) == 0)
+ {
+ task->data[1] >>= 1;
+ }
+ if (task->data[1] == 0)
+ {
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_80869F8(struct Task *task)
+{
+ gPlayerAvatar.unk6 = 0;
+ ScriptContext2_Disable();
+ CameraObjectReset1();
+ UnfreezeMapObjects();
+ InstallCameraPanAheadCallback();
+ DestroyTask(FindTaskIdByFunc(sub_8086774));
+ return FALSE;
+}
+
+void sub_8086A68(u8);
+extern void sub_80B4824(u8);
+extern void sub_8053FF8(void);
+extern void fade_8080918(void);
+
+void sub_8086B98(struct Task *);
+void sub_8086BE4(struct Task *);
+void sub_8086C30(void);
+void sub_8086C40(void);
+bool8 sub_8054034(void);
+void sub_8086C94(void);
+void sub_80B483C(void);
+void sub_8086CBC(u8);
+
+void sub_8086A2C(u8 a0, u8 priority)
+{
+ u8 taskId;
+ taskId = CreateTask(sub_8086A68, priority);
+ gTasks[taskId].data[1] = 0;
+ if (a0 == 0x6a)
+ {
+ gTasks[taskId].data[1] = 1;
+ }
+}
+
+void sub_8086A68(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ while (gUnknown_0839F2E8[task->data[0]](task));
+}
+
+bool8 sub_8086AA0(struct Task *task)
+{
+ FreezeMapObjects();
+ CameraObjectReset2();
+ sub_80B4824(task->data[1]);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_8086AC0(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble()));
+ task->data[0]++;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ if ((u8)task->data[1] == 0)
+ {
+ task->data[0] = 4;
+ }
+ PlaySE(SE_ESUKA);
+ }
+ return FALSE;
+}
+
+bool8 sub_8086B30(struct Task *task)
+{
+ sub_8086B98(task);
+ if (task->data[2] > 3)
+ {
+ sub_8086C30();
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_8086B54(struct Task *task)
+{
+ sub_8086B98(task);
+ sub_8086C40();
+ return FALSE;
+}
+
+bool8 sub_8086B64(struct Task *task)
+{
+ sub_8086BE4(task);
+ if (task->data[2] > 3)
+ {
+ sub_8086C30();
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_8086B88(struct Task *task)
+{
+ sub_8086BE4(task);
+ sub_8086C40();
+ return FALSE;
+}
+
+void sub_8086B98(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x84, task->data[2]);
+ sprite->pos2.y = Sin(0x94, task->data[2]);
+ task->data[3]++;
+ if (task->data[3] & 1)
+ {
+ task->data[2]++;
+ }
+}
+
+void sub_8086BE4(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x7c, task->data[2]);
+ sprite->pos2.y = Sin(0x76, task->data[2]);
+ task->data[3]++;
+ if (task->data[3] & 1)
+ {
+ task->data[2]++;
+ }
+}
+
+void sub_8086C30(void)
+{
+ sub_8053FF8();
+ fade_8080918();
+}
+
+void sub_8086C40(void)
+{
+ if (!gPaletteFade.active && sub_8054034() == TRUE)
+ {
+ sub_80B483C();
+ warp_in();
+ gUnknown_0300485C = sub_8086C94;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(sub_8086A68));
+ }
+}
+
+void sub_8086C94(void)
+{
+ sub_8053E90();
+ pal_fill_for_map_transition();
+ ScriptContext2_Enable();
+ CreateTask(sub_8086CBC, 0);
+ gUnknown_0300485C = NULL;
+}
+
+void sub_8086CBC(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ while (gUnknown_0839F300[task->data[0]](task));
+}
+
+bool8 sub_8086CF4(struct Task *task)
+{
+ struct MapObject *mapObject;
+ s16 x;
+ s16 y;
+ u8 behavior;
+ CameraObjectReset2();
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(DIR_EAST));
+ PlayerGetDestCoords(&x, &y);
+ behavior = MapGridGetMetatileBehaviorAt(x, y);
+ task->data[0]++;
+ task->data[1] = 16;
+ if (behavior == 0x6b)
+ {
+ behavior = 1;
+ task->data[0] = 3;
+ } else
+ {
+ behavior = 0;
+ }
+ sub_80B4824(behavior);
+ return TRUE;
+}
+
+bool8 sub_8086D70(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x84, task->data[1]);
+ sprite->pos2.y = Sin(0x94, task->data[1]);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_8086DB0(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x84, task->data[1]);
+ sprite->pos2.y = Sin(0x94, task->data[1]);
+ task->data[2]++;
+ if (task->data[2] & 1)
+ {
+ task->data[1]--;
+ }
+ if (task->data[1] == 0)
+ {
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ task->data[0] = 5;
+ }
+ return FALSE;
+}
+
+bool8 sub_8086E10(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x7c, task->data[1]);
+ sprite->pos2.y = Sin(0x76, task->data[1]);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_8086E50(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x7c, task->data[1]);
+ sprite->pos2.y = Sin(0x76, task->data[1]);
+ task->data[2]++;
+ if (task->data[2] & 1)
+ {
+ task->data[1]--;
+ }
+ if (task->data[1] == 0)
+ {
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+extern bool8 sub_80B4850(void);
+
+bool8 sub_8086EB0(struct Task *task)
+{
+ if (sub_80B4850())
+ {
+ return FALSE;
+ }
+ sub_80B483C();
+ task->data[0]++;
+ return TRUE;
+}
+
+bool8 sub_8086ED4(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ CameraObjectReset1();
+ ScriptContext2_Disable();
+ FieldObjectSetSpecialAnim(mapObject, GetGoSpeed0AnimId(DIR_EAST));
+ DestroyTask(FindTaskIdByFunc(sub_8086CBC));
+ }
+ return FALSE;
+}
+
+void sub_8086F64(u8);
+
+bool8 FldEff_UseWaterfall(void)
+{
+ u8 taskId;
+ taskId = CreateTask(sub_8086F64, 0xff);
+ gTasks[taskId].data[1] = gUnknown_0202FF84[0];
+ sub_8086F64(taskId);
+ return FALSE;
+}
+
+void sub_8086F64(u8 taskId)
+{
+ while (gUnknown_0839F31C[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId]));
+}
+
+bool8 sub_8086FB0(struct Task *task, struct MapObject *mapObject)
+{
+ ScriptContext2_Enable();
+ gPlayerAvatar.unk6 = 1;
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 waterfall_1_do_anim_probably(struct Task *task, struct MapObject *mapObject)
+{
+ ScriptContext2_Enable();
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject))
+ {
+ FieldObjectClearAnimIfSpecialAnimFinished(mapObject);
+ gUnknown_0202FF84[0] = task->data[1];
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 waterfall_2_wait_anim_finish_probably(struct Task *task, struct MapObject *mapObject)
+{
+ if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ {
+ return FALSE;
+ }
+ task->data[0]++;
+ return TRUE;
+}
+
+bool8 sub_8087030(struct Task *task, struct MapObject *mapObject)
+{
+ FieldObjectSetSpecialAnim(mapObject, GetSimpleGoAnimId(DIR_NORTH));
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_8087058(struct Task *task, struct MapObject *mapObject)
+{
+ if (!FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ return FALSE;
+ }
+ if (MetatileBehavior_IsWaterfall(mapObject->mapobj_unk_1E))
+ {
+ task->data[0] = 3;
+ return TRUE;
+ }
+ ScriptContext2_Disable();
+ gPlayerAvatar.unk6 = 0;
+ DestroyTask(FindTaskIdByFunc(sub_8086F64));
+ FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL);
+ return FALSE;
+}
+
+void Task_Dive(u8);
+extern int dive_warp(struct MapPosition *, u16);
+
+bool8 FldEff_UseDive(void)
+{
+ u8 taskId;
+ taskId = CreateTask(Task_Dive, 0xff);
+ gTasks[taskId].data[15] = gUnknown_0202FF84[0];
+ gTasks[taskId].data[14] = gUnknown_0202FF84[1];
+ Task_Dive(taskId);
+ return FALSE;
+}
+
+void Task_Dive(u8 taskId)
+{
+ while (gUnknown_0839F330[gTasks[taskId].data[0]](&gTasks[taskId]));
+}
+
+bool8 sub_8087124(struct Task *task)
+{
+ gPlayerAvatar.unk6 = 1;
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 dive_2_unknown(struct Task *task)
+{
+ ScriptContext2_Enable();
+ gUnknown_0202FF84[0] = task->data[15];
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 dive_3_unknown(struct Task *task)
+{
+ struct MapPosition mapPosition;
+ PlayerGetDestCoords(&mapPosition.x, &mapPosition.y);
+ if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ {
+ dive_warp(&mapPosition, gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E);
+ DestroyTask(FindTaskIdByFunc(Task_Dive));
+ FieldEffectActiveListRemove(FLDEFF_USE_DIVE);
+ }
+ return FALSE;
+}
+
+void sub_80871D0(u8);
+void mapldr_080851BC(void);
+
+void sub_80871B8(u8 priority)
+{
+ CreateTask(sub_80871D0, priority);
+}
+
+void sub_80871D0(u8 taskId)
+{
+ while (gUnknown_0839F33C[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId]));
+}
+
+bool8 sub_808722C(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ FreezeMapObjects();
+ CameraObjectReset2();
+ SetCameraPanningCallback(NULL);
+ gPlayerAvatar.unk6 = 1;
+ mapObject->mapobj_bit_26 = 1;
+ task->data[1] = 1;
+ task->data[0]++;
+ return TRUE;
+}
+
+bool8 sub_8087264(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ SetCameraPanning(0, task->data[1]);
+ task->data[1] = -task->data[1];
+ task->data[2]++;
+ if (task->data[2] > 7)
+ {
+ task->data[2] = 0;
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_8087298(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ sprite->pos2.y = 0;
+ task->data[3] = 1;
+ gUnknown_0202FF84[0] = mapObject->coords2.x;
+ gUnknown_0202FF84[1] = mapObject->coords2.y;
+ gUnknown_0202FF84[2] = sprite->subpriority - 1;
+ gUnknown_0202FF84[3] = sprite->oam.priority;
+ FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP);
+ PlaySE(SE_W153);
+ task->data[0]++;
+ return TRUE;
+}
+
+bool8 sub_80872E4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ s16 centerToCornerVecY;
+ SetCameraPanning(0, task->data[1]);
+ if (task->data[1] = -task->data[1], ++task->data[2] <= 17)
+ {
+ if (!(task->data[2] & 1) && (task->data[1] <= 3))
+ {
+ task->data[1] <<= 1;
+ }
+ } else if (!(task->data[2] & 4) && (task->data[1] > 0))
+ {
+ task->data[1] >>= 1;
+ }
+ if (task->data[2] > 6)
+ {
+ centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
+ if (sprite->pos2.y > -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY))
+ {
+ sprite->pos2.y -= task->data[3];
+ if (task->data[3] <= 7)
+ {
+ task->data[3]++;
+ }
+ } else
+ {
+ task->data[4] = 1;
+ }
+ }
+ if (task->data[5] == 0 && sprite->pos2.y < -0x10)
+ {
+ task->data[5]++;
+ mapObject->mapobj_bit_26 = 1;
+ sprite->oam.priority = 1;
+ sprite->subspriteMode = 2;
+ }
+ if (task->data[1] == 0 && task->data[4] != 0)
+ {
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_80873D8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ sub_8053FF8();
+ fade_8080918();
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_80873F4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (!gPaletteFade.active && sub_8054034() == TRUE)
+ {
+ warp_in();
+ gUnknown_0300485C = mapldr_080851BC;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(sub_80871D0));
+ }
+ return FALSE;
+}
+
+void sub_8087470(u8);
+extern u8 sub_80608A4(u8);
+
+void mapldr_080851BC(void)
+{
+ sub_8053E90();
+ pal_fill_for_map_transition();
+ ScriptContext2_Enable();
+ gUnknown_0300485C = NULL;
+ CreateTask(sub_8087470, 0);
+}
+
+void sub_8087470(u8 taskId)
+{
+ while (gUnknown_0839F354[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId]));
+}
+
+bool8 sub_80874CC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ CameraObjectReset2();
+ FreezeMapObjects();
+ gPlayerAvatar.unk6 = 1;
+ mapObject->mapobj_bit_13 = 1;
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_80874FC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (sub_807D770())
+ {
+ gUnknown_0202FF84[0] = mapObject->coords2.x;
+ gUnknown_0202FF84[1] = mapObject->coords2.y;
+ gUnknown_0202FF84[2] = sprite->subpriority - 1;
+ gUnknown_0202FF84[3] = sprite->oam.priority;
+ task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH);
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_8087548(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ sprite = &gSprites[task->data[1]];
+ if (sprite->animCmdIndex > 1)
+ {
+ task->data[0]++;
+ mapObject->mapobj_bit_13 = 0;
+ CameraObjectReset1();
+ PlaySE(SE_W091);
+ FieldObjectSetSpecialAnim(mapObject, sub_80608A4(DIR_EAST));
+ }
+ return FALSE;
+}
+
+bool8 sub_808759C(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ gPlayerAvatar.unk6 = 0;
+ ScriptContext2_Disable();
+ UnfreezeMapObjects();
+ DestroyTask(FindTaskIdByFunc(sub_8087470));
+ }
+ return FALSE;
+}
+
+extern void sub_8060470(s16 *x, s16 *y, s16 dx, s16 dy);
+extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36];
+
+u8 FldEff_LavaridgeGymWarp(void)
+{
+ u8 spriteId;
+ sub_8060470((s16 *)&gUnknown_0202FF84[0], (s16 *)&gUnknown_0202FF84[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]);
+ gSprites[spriteId].oam.priority = gUnknown_0202FF84[3];
+ gSprites[spriteId].coordOffsetEnabled = 1;
+ return spriteId;
+}
+
+void sub_8087638(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, FLDEFF_LAVARIDGE_GYM_WARP);
+ }
+}
+
+void sub_808766C(u8);
+
+void sub_8087654(u8 priority)
+{
+ CreateTask(sub_808766C, priority);
+}
+
+void sub_808766C(u8 taskId)
+{
+ while(gUnknown_0839F364[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId]));
+}
+
+bool8 sub_80876C8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ FreezeMapObjects();
+ CameraObjectReset2();
+ gPlayerAvatar.unk6 = 1;
+ mapObject->mapobj_bit_26 = 1;
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_80876F8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ if (task->data[1] > 3)
+ {
+ gUnknown_0202FF84[0] = mapObject->coords2.x;
+ gUnknown_0202FF84[1] = mapObject->coords2.y;
+ gUnknown_0202FF84[2] = sprite->subpriority - 1;
+ gUnknown_0202FF84[3] = sprite->oam.priority;
+ task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH);
+ task->data[0]++;
+ } else
+ {
+ task->data[1]++;
+ FieldObjectSetSpecialAnim(mapObject, GetStepInPlaceDelay4AnimId(mapObject->mapobj_unk_18));
+ PlaySE(SE_FU_ZUZUZU);
+ }
+ }
+ return FALSE;
+}
+
+bool8 sub_8087774(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (gSprites[task->data[1]].animCmdIndex == 2)
+ {
+ mapObject->mapobj_bit_13 = 1;
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_80877AC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
+ {
+ sub_8053FF8();
+ fade_8080918();
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+void sub_80878C4(u8);
+void mapldr_080859D4(void);
+
+bool8 sub_80877D4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (!gPaletteFade.active && sub_8054034() == TRUE)
+ {
+ warp_in();
+ gUnknown_0300485C = sub_8086748;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(sub_808766C));
+ }
+ return FALSE;
+}
+
+u8 FldEff_PopOutOfAsh(void)
+{
+ u8 spriteId;
+ sub_8060470((s16 *)&gUnknown_0202FF84[0], (s16 *)&gUnknown_0202FF84[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]);
+ gSprites[spriteId].oam.priority = gUnknown_0202FF84[3];
+ gSprites[spriteId].coordOffsetEnabled = 1;
+ return spriteId;
+}
+
+void sub_808788C(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, FLDEFF_POP_OUT_OF_ASH);
+ }
+}
+
+void sub_80878A8(void)
+{
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ CreateTask(sub_80878C4, 0x50);
+}
+
+void sub_80878C4(u8 taskId)
+{
+ gUnknown_0839F378[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_80878F4(struct Task *task)
+{
+ task->data[0]++;
+ task->data[14] = 64;
+ task->data[15] = player_get_direction_lower_nybble();
+}
+
+void sub_8087914(struct Task *task)
+{
+ struct MapObject *mapObject;
+ u8 unknown_0839F380[5];
+ memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380);
+ if (task->data[14] != 0 && (--task->data[14]) == 0)
+ {
+ sub_8053FF8();
+ fade_8080918();
+ }
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ if (task->data[14] == 0 && !gPaletteFade.active && sub_8054034() == TRUE)
+ {
+ FieldObjectSetDirection(mapObject, task->data[15]);
+ sub_8053678();
+ warp_in();
+ gUnknown_0300485C = mapldr_080859D4;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(sub_80878C4));
+ } else if (task->data[1] == 0 || (--task->data[1]) == 0)
+ {
+ FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(unknown_0839F380[mapObject->mapobj_unk_18]));
+ if (task->data[2] < 12)
+ {
+ task->data[2]++;
+ }
+ task->data[1] = 8 >> (task->data[2] >> 2);
+ }
+ }
+}
+
+void sub_8087A74(u8);
+
+void mapldr_080859D4(void)
+{
+ sub_8053E90();
+ pal_fill_for_map_transition();
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ gUnknown_0300485C = NULL;
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1;
+ CreateTask(sub_8087A74, 0);
+}
+
+void sub_8087A74(u8 taskId)
+{
+ gUnknown_0839F388[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_8087AA4(struct Task *task)
+{
+ if (sub_807D770())
+ {
+ task->data[0]++;
+ task->data[15] = player_get_direction_lower_nybble();
+ }
+}
+
+void sub_8087AC8(struct Task *task)
+{
+ struct MapObject *mapObject;
+ u8 unknown_0839F380[5];
+ memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380);
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (task->data[1] == 0 || (--task->data[1]) == 0)
+ {
+ if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) && !FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ return;
+ }
+ if (task->data[2] >= 32 && task->data[15] == player_get_direction_lower_nybble())
+ {
+ mapObject->mapobj_bit_13 = 0;
+ ScriptContext2_Disable();
+ UnfreezeMapObjects();
+ DestroyTask(FindTaskIdByFunc(sub_8087A74));
+ return;
+ }
+ FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(unknown_0839F380[mapObject->mapobj_unk_18]));
+ if (task->data[2] < 32)
+ {
+ task->data[2]++;
+ }
+ task->data[1] = task->data[2] >> 2;
+ }
+ mapObject->mapobj_bit_13 ^= 1;
+}
+
+void sub_8087BBC(u8);
+void mapldr_08085D88(void);
+
+void sub_8087BA8(void)
+{
+ CreateTask(sub_8087BBC, 0);
+}
+
+void sub_8087BBC(u8 taskId)
+{
+ gUnknown_0839F390[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_8087BEC(struct Task *task)
+{
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ CameraObjectReset2();
+ task->data[15] = player_get_direction_lower_nybble();
+ task->data[0]++;
+}
+
+void sub_8087C14(struct Task *task)
+{
+ struct MapObject *mapObject;
+ u8 unknown_0839F380[5];
+ memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380);
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (task->data[1] == 0 || (--task->data[1]) == 0)
+ {
+ FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]);
+ task->data[1] = 8;
+ task->data[2]++;
+ }
+ if (task->data[2] > 7 && task->data[15] == mapObject->mapobj_unk_18)
+ {
+ task->data[0]++;
+ task->data[1] = 4;
+ task->data[2] = 8;
+ task->data[3] = 1;
+ PlaySE(SE_TK_WARPIN);
+ }
+}
+
+void sub_8087CA4(struct Task *task)
+{
+ struct MapObject *mapObject;
+ struct Sprite *sprite;
+ u8 unknown_0839F380[5];
+ memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380);
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ if ((--task->data[1]) <= 0)
+ {
+ task->data[1] = 4;
+ FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]);
+ }
+ sprite->pos1.y -= task->data[3];
+ task->data[4] += task->data[3];
+ if ((--task->data[2]) <= 0 && (task->data[2] = 4, task->data[3] < 8))
+ {
+ task->data[3] <<= 1;
+ }
+ if (task->data[4] > 8 && (sprite->oam.priority = 1, sprite->subspriteMode != 0))
+ {
+ sprite->subspriteMode = 2;
+ }
+ if (task->data[4] >= 0xa8)
+ {
+ task->data[0]++;
+ sub_8053FF8();
+ fade_8080918();
+ }
+}
+
+void sub_8087D78(struct Task *task)
+{
+ if (!gPaletteFade.active && sub_8054034() == TRUE)
+ {
+ sub_8053570();
+ warp_in();
+ SetMainCallback2(CB2_LoadMap);
+ gUnknown_0300485C = mapldr_08085D88;
+ DestroyTask(FindTaskIdByFunc(sub_8087BBC));
+ }
+}
+
+void sub_8087E1C(u8);
+
+void mapldr_08085D88(void)
+{
+ sub_8053E90();
+ pal_fill_for_map_transition();
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ gUnknown_0300485C = NULL;
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1;
+ CameraObjectReset2();
+ CreateTask(sub_8087E1C, 0);
+}
+
+void sub_8087E1C(u8 taskId)
+{
+ gUnknown_0839F3A0[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_8087E4C(struct Task *task)
+{
+ struct Sprite *sprite;
+ s16 centerToCornerVecY;
+ if (sub_807D770())
+ {
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
+ sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY);
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 0;
+ task->data[0]++;
+ task->data[1] = 8;
+ task->data[2] = 1;
+ task->data[14] = sprite->subspriteMode;
+ task->data[15] = player_get_direction_lower_nybble();
+ PlaySE(SE_TK_WARPIN);
+ }
+}
+
+void sub_8087ED8(struct Task *task)
+{
+ u8 unknown_0839F380[5];
+ struct MapObject *mapObject;
+ struct Sprite *sprite;
+ memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380);
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ if ((sprite->pos2.y += task->data[1]) >= -8)
+ {
+ if (task->data[13] == 0)
+ {
+ task->data[13]++;
+ mapObject->mapobj_bit_2 = 1;
+ sprite->subspriteMode = task->data[14];
+ }
+ } else
+ {
+ sprite->oam.priority = 1;
+ if (sprite->subspriteMode != 0)
+ {
+ sprite->subspriteMode = 2;
+ }
+ }
+ if (sprite->pos2.y >= -0x30 && task->data[1] > 1 && !(sprite->pos2.y & 1))
+ {
+ task->data[1]--;
+ }
+ if ((--task->data[2]) == 0)
+ {
+ task->data[2] = 4;
+ FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]);
+ }
+ if (sprite->pos2.y >= 0)
+ {
+ sprite->pos2.y = 0;
+ task->data[0]++;
+ task->data[1] = 1;
+ task->data[2] = 0;
+ }
+}
+
+void sub_8087FDC(struct Task *task)
+{
+ u8 unknown_0839F380[5];
+ struct MapObject *mapObject;
+ memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380);
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if ((--task->data[1]) == 0)
+ {
+ FieldObjectTurn(mapObject, unknown_0839F380[mapObject->mapobj_unk_18]);
+ task->data[1] = 8;
+ if ((++task->data[2]) > 4 && task->data[14] == mapObject->mapobj_unk_18)
+ {
+ ScriptContext2_Disable();
+ CameraObjectReset1();
+ UnfreezeMapObjects();
+ DestroyTask(FindTaskIdByFunc(sub_8087E1C));
+ }
+ }
+}
+
+void sub_8088120(u8);
+void sub_808847C(u8);
+u8 sub_8088830(u32, u32, u32);
+void sub_80883DC(void);
+void sub_808843C(u16);
+void sub_8088890(struct Sprite *);
+
+bool8 FldEff_FieldMoveShowMon(void)
+{
+ u8 taskId;
+ if (is_light_level_1_2_3_5_or_6(sav1_map_get_light_level()) == TRUE)
+ {
+ taskId = CreateTask(sub_8088120, 0xff);
+ } else
+ {
+ taskId = CreateTask(sub_808847C, 0xff);
+ }
+ gTasks[taskId].data[15] = sub_8088830(gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]);
+ return FALSE;
+}
+
+bool8 FldEff_FieldMoveShowMonInit(void)
+{
+ struct Pokemon *pokemon;
+ u32 flag = gUnknown_0202FF84[0] & 0x80000000;
+ pokemon = &gPlayerParty[(u8)gUnknown_0202FF84[0]];
+ gUnknown_0202FF84[0] = GetMonData(pokemon, MON_DATA_SPECIES);
+ gUnknown_0202FF84[1] = GetMonData(pokemon, MON_DATA_OT_ID);
+ gUnknown_0202FF84[2] = GetMonData(pokemon, MON_DATA_PERSONALITY);
+ gUnknown_0202FF84[0] |= flag;
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON);
+ FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ return FALSE;
+}
+
+void sub_8088120(u8 taskId)
+{
+ gUnknown_0839F3AC[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_8088150(struct Task *task)
+{
+ task->data[11] = REG_WININ;
+ task->data[12] = REG_WINOUT;
+ StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback);
+ task->data[1] = 0xf0f1;
+ task->data[2] = 0x5051;
+ task->data[3] = 0x3f;
+ task->data[4] = 0x3e;
+ REG_WIN0H = task->data[1];
+ REG_WIN0V = task->data[2];
+ REG_WININ = task->data[3];
+ REG_WINOUT = task->data[4];
+ SetVBlankCallback(sub_80883DC);
+ task->data[0]++;
+}
+
+void sub_80881C0(struct Task *task)
+{
+ u16 offset;
+ u16 delta;
+ offset = ((REG_BG0CNT >> 2) << 14);
+ delta = ((REG_BG0CNT >> 8) << 11);
+ CpuCopy16(gFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x200);
+ CpuFill32(0, (void *)(VRAM + delta), 0x800);
+ LoadPalette(gFieldMoveStreaksPalette, 0xf0, 0x20);
+ sub_808843C(delta);
+ task->data[0]++;
+}
+
+void sub_8088228(struct Task *task)
+{
+ s16 v0;
+ s16 v2;
+ s16 v3;
+ task->data[5] -= 16;
+ v0 = ((u16)task->data[1] >> 8);
+ v2 = ((u16)task->data[2] >> 8);
+ v3 = ((u16)task->data[2] & 0xff);
+ v0 -= 16;
+ v2 -= 2;
+ v3 += 2;
+ if (v0 < 0)
+ {
+ v0 = 0;
+ }
+ if (v2 < 0x28)
+ {
+ v2 = 0x28;
+ }
+ if (v3 > 0x78)
+ {
+ v3 = 0x78;
+ }
+ task->data[1] = (v0 << 8) | (task->data[1] & 0xff);
+ task->data[2] = (v2 << 8) | v3;
+ if (v0 == 0 && v2 == 0x28 && v3 == 0x78)
+ {
+ gSprites[task->data[15]].callback = sub_8088890;
+ task->data[0]++;
+ }
+}
+
+void sub_80882B4(struct Task *task)
+{
+ task->data[5] -= 16;
+ if (gSprites[task->data[15]].data7)
+ {
+ task->data[0]++;
+ }
+}
+
+void sub_80882E4(struct Task *task)
+{
+ s16 v2;
+ s16 v3;
+ task->data[5] -= 16;
+ v2 = (task->data[2] >> 8);
+ v3 = (task->data[2] & 0xff);
+ v2 += 6;
+ v3 -= 6;
+ if (v2 > 0x50)
+ {
+ v2 = 0x50;
+ }
+ if (v3 < 0x51)
+ {
+ v3 = 0x51;
+ }
+ task->data[2] = (v2 << 8) | v3;
+ if (v2 == 0x50 && v3 == 0x51)
+ {
+ task->data[0]++;
+ }
+}
+
+void sub_8088338(struct Task *task)
+{
+ u16 bg0cnt;
+ bg0cnt = (REG_BG0CNT >> 8) << 11;
+ CpuFill32(0, (void *)VRAM + bg0cnt, 0x800);
+ task->data[1] = 0xf1;
+ task->data[2] = 0xa1;
+ task->data[3] = task->data[11];
+ task->data[4] = task->data[12];
+ task->data[0]++;
+}
+
+void sub_8088380(struct Task *task)
+{
+ IntrCallback callback;
+ LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback);
+ SetVBlankCallback(callback);
+ SetUpWindowConfig(&gWindowConfig_81E6CE4);
+ InitMenuWindow(&gWindowConfig_81E6CE4);
+ FreeResourcesAndDestroySprite(&gSprites[task->data[15]]);
+ FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON);
+ DestroyTask(FindTaskIdByFunc(sub_8088120));
+}
+
+void sub_80883DC(void)
+{
+ struct Task *task;
+ IntrCallback callback;
+ task = &gTasks[FindTaskIdByFunc(sub_8088120)];
+ LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback);
+ callback();
+ REG_WIN0H = task->data[1];
+ REG_WIN0V = task->data[2];
+ REG_WININ = task->data[3];
+ REG_WINOUT = task->data[4];
+ REG_BG0HOFS = task->data[5];
+ REG_BG0VOFS = task->data[6];
+}
+
+void sub_808843C(u16 offs)
+{
+ u16 i;
+ u16 *dest;
+ dest = (u16 *)(VRAM + 0x140 + offs);
+ for (i=0; i<0x140; i++, dest++)
+ {
+ *dest = gFieldMoveStreaksTilemap[i] | 0xf000;
+ }
+}
+
+void sub_80886B0(void);
+bool8 sub_8088708(struct Task *);
+void sub_80886F8(struct Task *);
+bool8 sub_80887C0(struct Task *);
+
+void sub_808847C(u8 taskId)
+{
+ gUnknown_0839F3C8[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_80884AC(struct Task *task)
+{
+ REG_BG0HOFS = task->data[1];
+ REG_BG0VOFS = task->data[2];
+ StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback);
+ SetVBlankCallback(sub_80886B0);
+ task->data[0]++;
+}
+
+void sub_80884E8(struct Task *task)
+{
+ u16 offset;
+ u16 delta;
+ offset = ((REG_BG0CNT >> 2) << 14);
+ delta = ((REG_BG0CNT >> 8) << 11);
+ task->data[12] = delta;
+ CpuCopy16(gDarknessFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x80);
+ CpuFill32(0, (void *)(VRAM + delta), 0x800);
+ LoadPalette(gDarknessFieldMoveStreaksPalette, 0xf0, 0x20);
+ task->data[0]++;
+}
+
+void sub_8088554(struct Task *task)
+{
+ if (sub_8088708(task))
+ {
+ REG_WIN1H = 0x00f0;
+ REG_WIN1V = 0x2878;
+ gSprites[task->data[15]].callback = sub_8088890;
+ task->data[0]++;
+ }
+ sub_80886F8(task);
+}
+
+void sub_80885A8(struct Task *task)
+{
+ sub_80886F8(task);
+ if (gSprites[task->data[15]].data7)
+ {
+ task->data[0]++;
+ }
+}
+
+void sub_80885D8(struct Task *task)
+{
+ sub_80886F8(task);
+ task->data[3] = task->data[1] & 7;
+ task->data[4] = 0;
+ REG_WIN1H = 0xffff;
+ REG_WIN1V = 0xffff;
+ task->data[0]++;
+}
+
+void sub_808860C(struct Task *task)
+{
+ sub_80886F8(task);
+ if (sub_80887C0(task))
+ {
+ task->data[0]++;
+ }
+}
+
+void sub_808862C(struct Task *task)
+{
+ IntrCallback intrCallback;
+ u16 bg0cnt;
+ bg0cnt = (REG_BG0CNT >> 8) << 11;
+ CpuFill32(0, (void *)VRAM + bg0cnt, 0x800);
+ LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback);
+ SetVBlankCallback(intrCallback);
+ SetUpWindowConfig(&gWindowConfig_81E6CE4);
+ InitMenuWindow(&gWindowConfig_81E6CE4);
+ FreeResourcesAndDestroySprite(&gSprites[task->data[15]]);
+ FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON);
+ DestroyTask(FindTaskIdByFunc(sub_808847C));
+}
+
+void sub_80886B0(void)
+{
+ IntrCallback intrCallback;
+ struct Task *task;
+ task = &gTasks[FindTaskIdByFunc(sub_808847C)];
+ LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback);
+ intrCallback();
+ REG_BG0HOFS = task->data[1];
+ REG_BG0VOFS = task->data[2];
+}
+
+void sub_80886F8(struct Task *task)
+{
+ task->data[1] -= 16;
+ task->data[3] += 16;
+}
+
+#ifdef NONMATCHING
+bool8 sub_8088708(struct Task *task)
+{
+ u16 i;
+ u16 srcOffs;
+ u16 dstOffs;
+ u16 *dest;
+ if (task->data[4] >= 32)
+ {
+ return TRUE;
+ }
+ dstOffs = (task->data[3] >> 3) & 0x1f;
+ if (dstOffs >= task->data[4])
+ {
+ dstOffs = (32 - dstOffs) & 0x1f;
+ srcOffs = (32 - task->data[4]) & 0x1f;
+ dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]);
+ for (i=0; i<10; i++)
+ {
+ dest[dstOffs + i * 32] = gDarknessFieldMoveStreaksTilemap[srcOffs + i * 32] | 0xf000;
+ dest[((dstOffs + 1) & 0x1f) + i * 32] = gDarknessFieldMoveStreaksTilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000;
+ }
+ task->data[4] += 2;
+ }
+ return FALSE;
+}
+#else
+__attribute__((naked))
+bool8 sub_8088708(struct Task *task)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x4\n"
+ "\tadds r5, r0, 0\n"
+ "\tldrh r2, [r5, 0x10]\n"
+ "\tmovs r1, 0x10\n"
+ "\tldrsh r0, [r5, r1]\n"
+ "\tcmp r0, 0x1F\n"
+ "\tble _08088724\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _080887A8\n"
+ "_08088724:\n"
+ "\tldrh r0, [r5, 0xE]\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r3, r0, 19\n"
+ "\tmovs r1, 0x1F\n"
+ "\tands r3, r1\n"
+ "\tmovs r4, 0x10\n"
+ "\tldrsh r0, [r5, r4]\n"
+ "\tcmp r3, r0\n"
+ "\tblt _080887A6\n"
+ "\tmovs r0, 0x20\n"
+ "\tsubs r3, r0, r3\n"
+ "\tands r3, r1\n"
+ "\tsubs r0, r2\n"
+ "\tmov r12, r0\n"
+ "\tmov r7, r12\n"
+ "\tands r7, r1\n"
+ "\tmov r12, r7\n"
+ "\tldrh r0, [r5, 0x20]\n"
+ "\tldr r1, _080887B8 @ =0x06000140\n"
+ "\tadds r1, r0\n"
+ "\tmov r8, r1\n"
+ "\tmovs r4, 0\n"
+ "\tldr r7, _080887BC @ =gDarknessFieldMoveStreaksTilemap\n"
+ "\tmov r10, r7\n"
+ "\tmovs r0, 0xF0\n"
+ "\tlsls r0, 8\n"
+ "\tmov r9, r0\n"
+ "\tadds r1, r3, 0x1\n"
+ "\tmovs r0, 0x1F\n"
+ "\tands r1, r0\n"
+ "\tstr r1, [sp]\n"
+ "\tmov r6, r12\n"
+ "\tadds r6, 0x1\n"
+ "\tands r6, r0\n"
+ "_08088768:\n"
+ "\tlsls r1, r4, 5\n"
+ "\tadds r2, r1, r3\n"
+ "\tlsls r2, 1\n"
+ "\tadd r2, r8\n"
+ "\tmov r7, r12\n"
+ "\tadds r0, r7, r1\n"
+ "\tlsls r0, 1\n"
+ "\tadd r0, r10\n"
+ "\tldrh r0, [r0]\n"
+ "\tmov r7, r9\n"
+ "\torrs r0, r7\n"
+ "\tstrh r0, [r2]\n"
+ "\tldr r0, [sp]\n"
+ "\tadds r2, r1, r0\n"
+ "\tlsls r2, 1\n"
+ "\tadd r2, r8\n"
+ "\tadds r1, r6, r1\n"
+ "\tlsls r1, 1\n"
+ "\tadd r1, r10\n"
+ "\tldrh r0, [r1]\n"
+ "\tmov r1, r9\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "\tadds r0, r4, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r4, r0, 16\n"
+ "\tcmp r4, 0x9\n"
+ "\tbls _08088768\n"
+ "\tldrh r0, [r5, 0x10]\n"
+ "\tadds r0, 0x2\n"
+ "\tstrh r0, [r5, 0x10]\n"
+ "_080887A6:\n"
+ "\tmovs r0, 0\n"
+ "_080887A8:\n"
+ "\tadd sp, 0x4\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1\n"
+ "\t.align 2, 0\n"
+ "_080887B8: .4byte 0x06000140\n"
+ "_080887BC: .4byte gDarknessFieldMoveStreaksTilemap");
+}
+#endif
+
+bool8 sub_80887C0(struct Task *task)
+{
+ u16 i;
+ u16 dstOffs;
+ u16 *dest;
+ if (task->data[4] >= 32)
+ {
+ return TRUE;
+ }
+ dstOffs = task->data[3] >> 3;
+ if (dstOffs >= task->data[4])
+ {
+ dstOffs = (task->data[1] >> 3) & 0x1f;
+ dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]);
+ for (i=0; i<10; i++)
+ {
+ dest[dstOffs + i * 32] = 0xf000;
+ dest[((dstOffs + 1) & 0x1f) + i * 32] = 0xf000;
+ }
+ task->data[4] += 2;
+ }
+ return FALSE;
+}
+
+u8 sub_8088830(u32 a0, u32 a1, u32 a2)
+{
+ u16 v0;
+ u8 monSprite;
+ struct Sprite *sprite;
+ v0 = (a0 & 0x80000000) >> 16;
+ a0 &= 0x7fffffff;
+ monSprite = CreateMonSprite_FieldMove(a0, a1, a2, 0x140, 0x50, 0);
+ sprite = &gSprites[monSprite];
+ sprite->callback = SpriteCallbackDummy;
+ sprite->oam.priority = 0;
+ sprite->data0 = a0;
+ sprite->data6 = v0;
+ return monSprite;
+}
+
+void sub_80888D4(struct Sprite *);
+
+void sub_8088890(struct Sprite *sprite)
+{
+ if ((sprite->pos1.x -= 20) <= 0x78)
+ {
+ sprite->pos1.x = 0x78;
+ sprite->data1 = 30;
+ sprite->callback = sub_80888D4;
+ if (sprite->data6)
+ {
+ PlayCry2(sprite->data0, 0, 0x7d, 0xa);
+ } else
+ {
+ PlayCry1(sprite->data0, 0);
+ }
+ }
+}
+
+void sub_80888F0(struct Sprite *);
+
+void sub_80888D4(struct Sprite *sprite)
+{
+ if ((--sprite->data1) == 0)
+ {
+ sprite->callback = sub_80888F0;
+ }
+}
+
+void sub_80888F0(struct Sprite *sprite)
+{
+ if (sprite->pos1.x < -0x40)
+ {
+ sprite->data7 = 1;
+ } else
+ {
+ sprite->pos1.x -= 20;
+ }
+}
+
+void sub_8088954(u8);
+
+u8 FldEff_UseSurf(void)
+{
+ u8 taskId;
+ taskId = CreateTask(sub_8088954, 0xff);
+ gTasks[taskId].data[15] = gUnknown_0202FF84[0];
+ sav1_reset_battle_music_maybe();
+ sub_8053FB0(0x016d);
+ return FALSE;
+}
+
+void sub_8088954(u8 taskId)
+{
+ gUnknown_0839F3E4[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_8088984(struct Task *task)
+{
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ gPlayerAvatar.unk6 = 1;
+ SetPlayerAvatarStateMask(8);
+ PlayerGetDestCoords(&task->data[1], &task->data[2]);
+ MoveCoords(gMapObjects[gPlayerAvatar.mapObjectId].placeholder18, &task->data[1], &task->data[2]);
+ task->data[0]++;
+}
+
+void sub_80889E4(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ sub_8059BF4();
+ FieldObjectSetSpecialAnim(mapObject, 0x39);
+ task->data[0]++;
+ }
+}
+
+void sub_8088A30(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(mapObject))
+ {
+ gUnknown_0202FF84[0] = task->data[15] | 0x80000000;
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ task->data[0]++;
+ }
+}
+
+void sub_8088A78(struct Task *task)
+{
+ struct MapObject *mapObject;
+ if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(3));
+ FieldObjectClearAnimIfSpecialAnimFinished(mapObject);
+ FieldObjectSetSpecialAnim(mapObject, sub_80608D0(mapObject->placeholder18));
+ gUnknown_0202FF84[0] = task->data[1];
+ gUnknown_0202FF84[1] = task->data[2];
+ gUnknown_0202FF84[2] = gPlayerAvatar.mapObjectId;
+ mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_SURF_BLOB);
+ task->data[0]++;
+ }
+}
+
+void sub_8088AF4(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ gPlayerAvatar.unk6 = 0;
+ gPlayerAvatar.flags &= 0xdf;
+ FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(mapObject->placeholder18));
+ sub_8127ED0(mapObject->mapobj_unk_1A, 1);
+ UnfreezeMapObjects();
+ ScriptContext2_Disable();
+ FieldEffectActiveListRemove(FLDEFF_USE_SURF);
+ DestroyTask(FindTaskIdByFunc(sub_8088954));
+ }
+}
+
+void sub_8088BC4(struct Sprite *);
+
+u8 FldEff_NPCFlyOut(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+ spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0x78, 0, 1);
+ sprite = &gSprites[spriteId];
+ sprite->oam.paletteNum = 0;
+ sprite->oam.priority = 1;
+ sprite->callback = sub_8088BC4;
+ sprite->data1 = gUnknown_0202FF84[0];
+ PlaySE(SE_W019);
+ return spriteId;
+}
+
+void sub_8088BC4(struct Sprite *sprite)
+{
+ struct Sprite *npcSprite;
+ sprite->pos2.x = Cos(sprite->data2, 0x8c);
+ sprite->pos2.y = Sin(sprite->data2, 0x48);
+ sprite->data2 = (sprite->data2 + 4) & 0xff;
+ if (sprite->data0)
+ {
+ npcSprite = &gSprites[sprite->data1];
+ npcSprite->coordOffsetEnabled = 0;
+ npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x;
+ npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8;
+ npcSprite->pos2.x = 0;
+ npcSprite->pos2.y = 0;
+ }
+ if (sprite->data2 >= 0x80)
+ {
+ FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT);
+ }
+}
+
+void sub_8088C70(u8);
+extern void sub_8127EFC(u8, u8);
+u8 sub_8088F60(void);
+bool8 sub_8088FA4(u8);
+void sub_8088FC0(u8);
+void sub_8088FFC(u8, u8);
+void sub_8089018(struct Sprite *);
+void sub_80890D8(struct Sprite *);
+
+u8 FldEff_UseFly(void)
+{
+ u8 taskId;
+ taskId = CreateTask(sub_8088C70, 0xfe);
+ gTasks[taskId].data[1] = gUnknown_0202FF84[0];
+ return 0;
+}
+
+void sub_8088C70(u8 taskId)
+{
+ gUnknown_0839F3F8[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_8088CA0(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ task->data[15] = gPlayerAvatar.flags;
+ gPlayerAvatar.unk6 = 0x01;
+ SetPlayerAvatarStateMask(1);
+ sub_8059BF4();
+ FieldObjectSetSpecialAnim(mapObject, 0x39);
+ task->data[0]++;
+ }
+}
+
+void sub_8088CF8(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ task->data[0]++;
+ gUnknown_0202FF84[0] = task->data[1];
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ }
+}
+
+void sub_8088D3C(struct Task *task)
+{
+ struct MapObject *mapObject;
+ if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (task->data[15] & 0x08)
+ {
+ sub_8127ED0(mapObject->mapobj_unk_1A, 2);
+ sub_8127EFC(mapObject->mapobj_unk_1A, 0);
+ }
+ task->data[1] = sub_8088F60();
+ task->data[0]++;
+ }
+}
+
+void sub_8088D94(struct Task *task)
+{
+ if (sub_8088FA4(task->data[1]))
+ {
+ task->data[0]++;
+ task->data[2] = 16;
+ SetPlayerAvatarTransitionFlags(0x01);
+ FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], 0x02);
+ }
+}
+
+void sub_8088DD8(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if ((task->data[2] == 0 || (--task->data[2]) == 0) && FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ task->data[0]++;
+ PlaySE(SE_W019);
+ sub_8088FC0(task->data[1]);
+ }
+}
+
+void sub_8088E2C(struct Task *task)
+{
+ struct MapObject *mapObject;
+ if ((++task->data[2]) >= 8)
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(0x03));
+ StartSpriteAnim(&gSprites[mapObject->spriteId], 0x16);
+ mapObject->mapobj_bit_12 = 1;
+ FieldObjectSetSpecialAnim(mapObject, 0x48);
+ if (task->data[15] & 0x08)
+ {
+ DestroySprite(&gSprites[mapObject->mapobj_unk_1A]);
+ }
+ task->data[0]++;
+ task->data[2] = 0;
+ }
+}
+
+void sub_8088EB4(struct Task *task)
+{
+ struct MapObject *mapObject;
+ if ((++task->data[2]) >= 10)
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ FieldObjectClearAnimIfSpecialAnimActive(mapObject);
+ mapObject->mapobj_bit_12 = 0;
+ mapObject->mapobj_bit_22 = 0;
+ sub_8088FFC(task->data[1], mapObject->spriteId);
+ CameraObjectReset2();
+ task->data[0]++;
+ }
+}
+
+void sub_8088F10(struct Task *task)
+{
+ if (sub_8088FA4(task->data[1]))
+ {
+ fade_8080918();
+ task->data[0]++;
+ }
+}
+
+void sub_8088F30(struct Task *task)
+{
+ if (!gPaletteFade.active)
+ {
+ FieldEffectActiveListRemove(FLDEFF_USE_FLY);
+ DestroyTask(FindTaskIdByFunc(sub_8088C70));
+ }
+}
+
+u8 sub_8088F60(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+ spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0xff, 0xb4, 0x1);
+ sprite = &gSprites[spriteId];
+ sprite->oam.paletteNum = 0;
+ sprite->oam.priority = 1;
+ sprite->callback = sub_8089018;
+ return spriteId;
+}
+
+u8 sub_8088FA4(u8 spriteId)
+{
+ return gSprites[spriteId].data7;
+}
+
+void sub_8088FC0(u8 spriteId)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[spriteId];
+ sprite->callback = sub_80890D8;
+ sprite->pos1.x = 0x78;
+ sprite->pos1.y = 0x00;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ memset(&sprite->data0, 0, 8 * sizeof(u16) /* zero all data cells */);
+ sprite->data6 = 0x40;
+}
+
+void sub_8088FFC(u8 a0, u8 a1)
+{
+ gSprites[a0].data6 = a1;
+}
+
+void sub_8089018(struct Sprite *sprite)
+{
+ if (sprite->data7 == 0)
+ {
+ if (sprite->data0 == 0)
+ {
+ sprite->oam.affineMode = 3;
+ sprite->affineAnims = gSpriteAffineAnimTable_0839F44C;
+ InitSpriteAffineAnim(sprite);
+ StartSpriteAffineAnim(sprite, 0);
+ sprite->pos1.x = 0x76;
+ sprite->pos1.y = -0x30;
+ sprite->data0++;
+ sprite->data1 = 0x40;
+ sprite->data2 = 0x100;
+ }
+ sprite->data1 += (sprite->data2 >> 8);
+ sprite->pos2.x = Cos(sprite->data1, 0x78);
+ sprite->pos2.y = Sin(sprite->data1, 0x78);
+ if (sprite->data2 < 0x800)
+ {
+ sprite->data2 += 0x60;
+ }
+ if (sprite->data1 > 0x81)
+ {
+ sprite->data7++;
+ sprite->oam.affineMode = 0;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, 0);
+ }
+ }
+}
+
+void sub_80890D8(struct Sprite *sprite)
+{
+ struct Sprite *sprite1;
+ sprite->pos2.x = Cos(sprite->data2, 0x8c);
+ sprite->pos2.y = Sin(sprite->data2, 0x48);
+ sprite->data2 = (sprite->data2 + 4) & 0xff;
+ if (sprite->data6 != 0x40)
+ {
+ sprite1 = &gSprites[sprite->data6];
+ sprite1->coordOffsetEnabled = 0;
+ sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x;
+ sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8;
+ sprite1->pos2.x = 0;
+ sprite1->pos2.y = 0;
+ }
+ if (sprite->data2 >= 0x80)
+ {
+ sprite->data7 = 1;
+ }
+}
+
+void sub_808914C(struct Sprite *sprite)
+{
+ if (sprite->data7 == 0)
+ {
+ if (sprite->data0 == 0)
+ {
+ sprite->oam.affineMode = 3;
+ sprite->affineAnims = gSpriteAffineAnimTable_0839F44C;
+ InitSpriteAffineAnim(sprite);
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->pos1.x = 0x5e;
+ sprite->pos1.y = -0x20;
+ sprite->data0++;
+ sprite->data1 = 0xf0;
+ sprite->data2 = 0x800;
+ sprite->data4 = 0x80;
+ }
+ sprite->data1 += sprite->data2 >> 8;
+ sprite->data3 += sprite->data2 >> 8;
+ sprite->data1 &= 0xff;
+ sprite->pos2.x = Cos(sprite->data1, 0x20);
+ sprite->pos2.y = Sin(sprite->data1, 0x78);
+ if (sprite->data2 > 0x100)
+ {
+ sprite->data2 -= sprite->data4;
+ }
+ if (sprite->data4 < 0x100)
+ {
+ sprite->data4 += 24;
+ }
+ if (sprite->data2 < 0x100)
+ {
+ sprite->data2 = 0x100;
+ }
+ if (sprite->data3 >= 60)
+ {
+ sprite->data7++;
+ sprite->oam.affineMode = 0;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ sprite->invisible = 1;
+ }
+ }
+}
+
+void sub_8089230(u8 spriteId)
+{
+ sub_8088FC0(spriteId);
+ gSprites[spriteId].callback = sub_808914C;
+}
+
+void sub_8089270(u8);
+
+u8 FldEff_FlyIn(void)
+{
+ CreateTask(sub_8089270, 0xfe);
+ return 0;
+}
+
+void sub_8089270(u8 taskId)
+{
+ gUnknown_0839F454[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_80892A0(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ task->data[0]++;
+ task->data[2] = 17;
+ task->data[15] = gPlayerAvatar.flags;
+ gPlayerAvatar.unk6 = 1;
+ SetPlayerAvatarStateMask(0x01);
+ if (task->data[15] & 0x08)
+ {
+ sub_8127ED0(mapObject->mapobj_unk_1A, 0);
+ }
+ sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(0x3));
+ CameraObjectReset2();
+ FieldObjectTurn(mapObject, DIR_WEST);
+ StartSpriteAnim(&gSprites[mapObject->spriteId], 0x16);
+ mapObject->mapobj_bit_13 = 0;
+ task->data[1] = sub_8088F60();
+ sub_8088FC0(task->data[1]);
+ sub_8088FFC(task->data[1], mapObject->spriteId);
+ }
+}
+
+void sub_8089354(struct Task *task)
+{
+ struct MapObject *mapObject;
+ struct Sprite *sprite;
+ if (task->data[2] == 0 || (--task->data[2]) == 0)
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ sprite = &gSprites[mapObject->spriteId];
+ sub_8088FFC(task->data[1], 0x40);
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ task->data[0]++;
+ task->data[2] = 0;
+ }
+}
+
+void sub_80893C0(struct Task *task)
+{
+ s16 unknown_0839F470[18];
+ struct Sprite *sprite;
+ memcpy(unknown_0839F470, gUnknown_0839F470, sizeof gUnknown_0839F470);
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.y = unknown_0839F470[task->data[2]];
+ if ((++task->data[2]) >= 18)
+ {
+ task->data[0]++;
+ }
+}
+
+void sub_8089414(struct Task *task)
+{
+ struct MapObject *mapObject;
+ struct Sprite *sprite;
+ if (sub_8088FA4(task->data[1]))
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ sprite = &gSprites[mapObject->spriteId];
+ mapObject->mapobj_bit_12 = 0;
+ sub_805C058(mapObject, mapObject->coords2.x, mapObject->coords2.y);
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->coordOffsetEnabled = 1;
+ sub_8059BF4();
+ FieldObjectSetSpecialAnim(mapObject, 0x39);
+ task->data[0]++;
+ }
+}
+
+void sub_808948C(struct Task *task)
+{
+ if (FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gPlayerAvatar.mapObjectId]))
+ {
+ task->data[0]++;
+ sub_8089230(task->data[1]);
+ }
+}
+
+void sub_80894C4(struct Task *task)
+{
+ if (sub_8088FA4(task->data[1]))
+ {
+ DestroySprite(&gSprites[task->data[1]]);
+ task->data[0]++;
+ task->data[1] = 0x10;
+ }
+}
+
+void fishE(struct Task *task)
+{
+ u8 state;
+ struct MapObject *mapObject;
+ if ((--task->data[1]) == 0)
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ state = 0;
+ if (task->data[15] & 0x08)
+ {
+ state = 3;
+ sub_8127ED0(mapObject->mapobj_unk_1A, 1);
+ }
+ sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(state));
+ FieldObjectTurn(mapObject, DIR_SOUTH);
+ gPlayerAvatar.flags = task->data[15];
+ gPlayerAvatar.unk6 = 0;
+ FieldEffectActiveListRemove(FLDEFF_FLY_IN);
+ DestroyTask(FindTaskIdByFunc(sub_8089270));
+ }
+}
diff --git a/src/palette.c b/src/palette.c
index 165eb2eae..a610049bc 100644
--- a/src/palette.c
+++ b/src/palette.c
@@ -615,7 +615,7 @@ static u8 UpdateFastPaletteFade(void)
if (b < b0)
b = b0;
- gPlttBufferFaded[i] = r | (g << 5) | (b << 10);
+ gPlttBufferFaded[i] = RGB(r, g, b);
}
break;
case FAST_FADE_OUT_TO_WHTIE:
@@ -633,7 +633,7 @@ static u8 UpdateFastPaletteFade(void)
if (b > 31)
b = 31;
- gPlttBufferFaded[i] = r | (g << 5) | (b << 10);
+ gPlttBufferFaded[i] = RGB(r, g, b);
}
break;
case FAST_FADE_IN_FROM_BLACK:
@@ -659,7 +659,7 @@ static u8 UpdateFastPaletteFade(void)
if (b > b0)
b = b0;
- gPlttBufferFaded[i] = r | (g << 5) | (b << 10);
+ gPlttBufferFaded[i] = RGB(r, g, b);
}
break;
case FAST_FADE_OUT_TO_BLACK:
@@ -677,7 +677,7 @@ static u8 UpdateFastPaletteFade(void)
if (b < 0)
b = 0;
- gPlttBufferFaded[i] = r | (g << 5) | (b << 10);
+ gPlttBufferFaded[i] = RGB(r, g, b);
}
}
diff --git a/src/record_mixing.c b/src/record_mixing.c
index c84cfd2ae..f9cb4116e 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -13,18 +13,19 @@
#include "strings2.h"
#include "task.h"
+
extern void *recordMixingSecretBases;
extern void *recordMixingTvShows;
extern void *gUnknown_083D0274;
extern void *gUnknown_083D0278;
extern void *recordMixingEasyChatPairs;
-extern void *gUnknown_083D0280;
extern void *gUnknown_083D0284;
extern u8 gUnknown_083D0288[2];
extern u8 gUnknown_083D028A[2][3];
extern u8 gUnknown_083D0290[9][4];
-extern struct RecordMixing_UnknownStruct gUnknown_02038738[2]; //Don't know what type this points to
+extern struct RecordMixing_UnknownStruct gUnknown_02038738; //Don't know what type this points to
+extern struct RecordMixing_UnknownStruct *gUnknown_083D0280;
extern u16 gSpecialVar_0x8005;
extern u32 gUnknown_03005D2C;
extern u8 gUnknown_03000718;
@@ -40,11 +41,11 @@ void sub_80B929C(void)
struct PlayerRecords {
struct SecretBaseRecord secretBases[20];
- u8 tvShows[25][36];
+ TVShow tvShows[25];
u8 filler1004[0x40];
u8 filler1044[0x40];
struct EasyChatPair easyChatPairs[5];
- u8 filler10AC[0x78];
+ struct RecordMixing_UnknownStruct filler10AC;
u8 filler1124[0xA4];
u16 filler11C8[0x34];
};
@@ -65,10 +66,10 @@ void RecordMixing_PrepareExchangePacket(void)
memcpy(unk_2018000.filler1004, gUnknown_083D0274, 0x40);
memcpy(unk_2018000.filler1044, gUnknown_083D0278, 0x40);
memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, 0x28);
- gUnknown_02038738[0] = gSaveBlock1.filler_303C[0];
- gUnknown_02038738[1] = gSaveBlock1.filler_303C[1];
- sub_8041324(gSaveBlock1.daycareData, gUnknown_02038738);
- memcpy(unk_2018000.filler10AC, gUnknown_083D0280, 0x78);
+ gUnknown_02038738.data[0] = gSaveBlock1.filler_303C.data[0];
+ gUnknown_02038738.data[1] = gSaveBlock1.filler_303C.data[1];
+ sub_8041324(gSaveBlock1.daycareData, &gUnknown_02038738);
+ memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixing_UnknownStruct));
memcpy(unk_2018000.filler1124, gUnknown_083D0284, 0xA4);
if (GetMultiplayerId() == 0)
@@ -83,7 +84,7 @@ void RecordMixing_ReceiveExchangePacket(u32 a)
sub_80B9B1C(unk_2008000.filler1044, sizeof(struct PlayerRecords), a);
//UB: Too many arguments for function "sub_80FA4E4"
sub_80FA4E4(unk_2008000.easyChatPairs, sizeof(struct PlayerRecords), a);
- sub_80B9C6C(unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows);
+ sub_80B9C6C(&unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows);
sub_80B9B70(unk_2008000.filler1124, sizeof(struct PlayerRecords), a);
sub_80B9F3C(unk_2008000.filler11C8, a);
}
@@ -428,14 +429,20 @@ u8 sub_80B9BBC(u16 *a)
#undef NONMATCHING
#ifdef NONMATCHING
-void sub_80B9BC4(u32 a, u32 b, u32 c, u32 d)
+void sub_80B9BC4(struct RecordMixing_UnknownStruct *a, size_t b, u8 c[][2], u8 d, u8 e)
{
+ struct RecordMixing_UnknownStructSub *offA;
+ struct RecordMixing_UnknownStructSub *offB;
+ struct RecordMixing_UnknownStructSub v0;
+ v0 = (offA = ((struct RecordMixing_UnknownStruct *)(b * c[d][0] + (u32)&a))->data)[c[d][1]];
+ offA[c[d][1]] = (offB = ((struct RecordMixing_UnknownStruct *)(b * c[e][0] + (u32)&a))->data)[c[e][1]];
+ offB[c[e][1]] = v0;
//ToDo: Figure out what this strange stack usage is
}
#else
__attribute__((naked))
-void sub_80B9BC4(u32 a, u32 b, u32 c, u32 d)
+void sub_80B9BC4(struct RecordMixing_UnknownStruct *a, size_t b, u8 c[][2], u8 d, u8 e)
{
asm(".syntax unified\n\
push {r4-r6,lr}\n\
@@ -517,75 +524,3 @@ u8 sub_80B9C4C(u8 *a)
return r2;
}
-struct UnkStruct1
-{
- u8 unk0[4];
- u8 unk4[4];
- u8 unk8[4];
- u8 fillerC[0x10];
- u8 unk1C[4][2];
- u8 filler24[8];
- void *unk2C;
- u32 unk30;
- u32 unk34;
- void *unk38;
- u32 unk3C;
- u32 unk40;
- u8 filler44[4];
- u32 unk48;
- u32 unk4C;
- u32 unk50;
-
-};
-
-/*
-//Not finished
-extern void sub_80B9C6C(void *a, u32 b, u8 c, void *d)
-{
- struct UnkStruct1 s;
- u16 r8;
- u16 r3;
-
- s.unk2C = a;
- s.unk30 = b;
- s.unk38 = d;
- s.unk34 = c;
- s.unk40 = Random();
- SeedRng(gLinkPlayers[0].trainerId);
- r8 = GetLinkPlayerCount();
- r3 = 0;
-
- s.unk4C = 12;
-
- while (r3 < 4)
- {
-
- s.unk4[r3] |= 0xFF;
- s.unk8[r3] = 0;
-
- s.unk1C[r3][0] = 0;
- s.unk1C[r3][1] = 0;
- r3++;
- }
- s.unk3C = 0;
- r3 = 0;
- s.unk50 = r8 << 16;
- s.unk48 = s.unk30 * s.unk34;
-
- if (s.unk3C < r8)
- {
- do //_080B9D00
- {
- u32 *r6 = (u32 *)(s.unk2C + s.unk30 * r3);
- if (r6[0x1C] != 0 && r6[0x1C] > 0)
- {
-
- }
- //_080B9D3C
- }
- while (r3 < r8);
- }
- //_080B9D46
-}
-*/
-