summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2020-03-02 12:11:22 -0500
committerGitHub <noreply@github.com>2020-03-02 12:11:22 -0500
commitae08a402904b8c4069bdfba61f0af8f433083f91 (patch)
tree7bc8513f997cbf0ee4457df9341919b4e9eabe08
parent5198a05272716990bcd98b9b216d3431adb25a3e (diff)
parent2d820809d74eaf4775ad0e2cc50e57bb65ed61a6 (diff)
Merge pull request #279 from PikalaxALT/field_effect
Field effect
-rw-r--r--asm/event_object_movement.s18
-rw-r--r--asm/field_camera.s24
-rw-r--r--asm/field_effect.s9666
-rw-r--r--asm/field_effect_helpers.s30
-rw-r--r--asm/field_player_avatar.s4
-rw-r--r--asm/field_weather.s12
-rw-r--r--asm/overworld.s42
-rw-r--r--asm/pokemon_storage_system.s2
-rw-r--r--data/event_object_movement.s4
-rw-r--r--data/field_effect.s432
-rw-r--r--data/field_effect_scripts.s40
-rw-r--r--include/constants/event_object_movement.h2
-rw-r--r--include/constants/field_effects.h4
-rw-r--r--include/data.h2
-rw-r--r--include/event_object_movement.h6
-rw-r--r--include/field_camera.h7
-rw-r--r--include/field_control_avatar.h1
-rw-r--r--include/field_effect.h16
-rw-r--r--include/field_effect_helpers.h1
-rw-r--r--include/field_effect_scripts.h6
-rw-r--r--include/field_fadetransition.h5
-rw-r--r--include/field_player_avatar.h1
-rw-r--r--include/field_screen_effect.h1
-rw-r--r--include/field_weather.h3
-rw-r--r--include/fldeff.h2
-rw-r--r--include/global.fieldmap.h11
-rw-r--r--include/overworld.h10
-rw-r--r--include/quest_log.h4
-rw-r--r--include/special_field_anim.h2
-rw-r--r--ld_script.txt4
-rw-r--r--src/data/pokemon_graphics/palette_table.h3
-rw-r--r--src/field_effect.c3907
-rw-r--r--src/field_fadetransition.c66
-rw-r--r--src/field_screen_effect.c2
-rw-r--r--src/field_specials.c4
-rw-r--r--src/fldeff_rocksmash.c6
-rw-r--r--src/fldeff_strength.c14
-rw-r--r--src/item_use.c6
-rw-r--r--src/main.c6
-rw-r--r--src/map_preview_screen.c2
-rw-r--r--src/party_menu.c15
-rw-r--r--src/player_pc.c8
-rw-r--r--src/quest_log.c2
-rw-r--r--src/quest_log_player.c6
-rw-r--r--src/region_map.c2
-rw-r--r--src/script_menu.c8
-rw-r--r--src/seagallop.c2
-rw-r--r--src/shop.c2
-rw-r--r--src/vs_seeker.c4
-rw-r--r--sym_bss.txt4
-rw-r--r--sym_common.txt4
51 files changed, 4132 insertions, 10303 deletions
diff --git a/asm/event_object_movement.s b/asm/event_object_movement.s
index 811182517..cf5b8c54d 100644
--- a/asm/event_object_movement.s
+++ b/asm/event_object_movement.s
@@ -669,7 +669,7 @@ sub_805E2E8: @ 805E2E8
bl GetCurrentMapType
lsls r0, 24
lsrs r0, 24
- bl is_light_level_1_2_3_5_or_6
+ bl IsMapTypeOutdoors
lsls r0, 24
cmp r0, 0
beq _0805E37C
@@ -12893,12 +12893,12 @@ sub_8063AD4: @ 8063AD4
subs r1, r0
lsls r1, 4
strh r1, [r3]
- ldr r1, _08063B14 @ =gUnknown_300506C
+ ldr r1, _08063B14 @ =gTotalCameraPixelOffsetX
ldrh r0, [r2]
ldrh r1, [r1]
subs r0, r1
strh r0, [r2]
- ldr r1, _08063B18 @ =gUnknown_3005068
+ ldr r1, _08063B18 @ =gTotalCameraPixelOffsetY
ldrh r0, [r3]
ldrh r1, [r1]
subs r0, r1
@@ -12908,8 +12908,8 @@ sub_8063AD4: @ 8063AD4
bx r0
.align 2, 0
_08063B10: .4byte gSaveBlock1Ptr
-_08063B14: .4byte gUnknown_300506C
-_08063B18: .4byte gUnknown_3005068
+_08063B14: .4byte gTotalCameraPixelOffsetX
+_08063B18: .4byte gTotalCameraPixelOffsetY
thumb_func_end sub_8063AD4
thumb_func_start sub_8063B1C
@@ -12921,7 +12921,7 @@ sub_8063B1C: @ 8063B1C
lsrs r5, r0, 16
lsls r1, 16
lsrs r6, r1, 16
- ldr r0, _08063BB0 @ =gUnknown_300506C
+ ldr r0, _08063BB0 @ =gTotalCameraPixelOffsetX
ldrh r0, [r0]
negs r0, r0
ldr r1, _08063BB4 @ =gUnknown_3005050
@@ -12929,7 +12929,7 @@ sub_8063B1C: @ 8063B1C
subs r0, r2
lsls r0, 16
lsrs r3, r0, 16
- ldr r0, _08063BB8 @ =gUnknown_3005068
+ ldr r0, _08063BB8 @ =gTotalCameraPixelOffsetY
ldrh r0, [r0]
negs r0, r0
ldr r1, [r1, 0x14]
@@ -12992,9 +12992,9 @@ _08063B7C:
pop {r0}
bx r0
.align 2, 0
-_08063BB0: .4byte gUnknown_300506C
+_08063BB0: .4byte gTotalCameraPixelOffsetX
_08063BB4: .4byte gUnknown_3005050
-_08063BB8: .4byte gUnknown_3005068
+_08063BB8: .4byte gTotalCameraPixelOffsetY
_08063BBC: .4byte 0xfff00000
_08063BC0: .4byte gSaveBlock1Ptr
thumb_func_end sub_8063B1C
diff --git a/asm/field_camera.s b/asm/field_camera.s
index cf9fff21d..aa906d6fc 100644
--- a/asm/field_camera.s
+++ b/asm/field_camera.s
@@ -956,11 +956,11 @@ _0805AC7E:
adds r1, r7, 0
mov r2, r8
bl coords8_add
- ldr r1, _0805ACAC @ =gUnknown_300506C
+ ldr r1, _0805ACAC @ =gTotalCameraPixelOffsetX
ldrh r0, [r1]
subs r0, r7
strh r0, [r1]
- ldr r1, _0805ACB0 @ =gUnknown_3005068
+ ldr r1, _0805ACB0 @ =gTotalCameraPixelOffsetY
ldrh r0, [r1]
mov r2, r8
subs r0, r2
@@ -973,8 +973,8 @@ _0805AC7E:
.align 2, 0
_0805ACA4: .4byte gUnknown_3005050
_0805ACA8: .4byte gUnknown_3000E90
-_0805ACAC: .4byte gUnknown_300506C
-_0805ACB0: .4byte gUnknown_3005068
+_0805ACAC: .4byte gTotalCameraPixelOffsetX
+_0805ACB0: .4byte gTotalCameraPixelOffsetY
thumb_func_end CameraUpdate
thumb_func_start sub_805ACB4
@@ -989,12 +989,12 @@ sub_805ACB4: @ 805ACB4
asrs r1, 16
bl UpdateObjectEventsForCameraUpdate
bl DrawWholeMapView
- ldr r1, _0805ACE8 @ =gUnknown_300506C
+ ldr r1, _0805ACE8 @ =gTotalCameraPixelOffsetX
lsls r4, 4
ldrh r0, [r1]
subs r0, r4
strh r0, [r1]
- ldr r1, _0805ACEC @ =gUnknown_3005068
+ ldr r1, _0805ACEC @ =gTotalCameraPixelOffsetY
lsls r5, 4
ldrh r0, [r1]
subs r0, r5
@@ -1003,8 +1003,8 @@ sub_805ACB4: @ 805ACB4
pop {r0}
bx r0
.align 2, 0
-_0805ACE8: .4byte gUnknown_300506C
-_0805ACEC: .4byte gUnknown_3005068
+_0805ACE8: .4byte gTotalCameraPixelOffsetX
+_0805ACEC: .4byte gTotalCameraPixelOffsetY
thumb_func_end sub_805ACB4
thumb_func_start sub_805ACF0
@@ -1184,14 +1184,14 @@ UpdateCameraPanning: @ 805AE28
bl _call_via_r0
_0805AE36:
ldr r2, _0805AE5C @ =gSpriteCoordOffsetX
- ldr r0, _0805AE60 @ =gUnknown_300506C
+ ldr r0, _0805AE60 @ =gTotalCameraPixelOffsetX
ldr r1, _0805AE64 @ =gUnknown_3000E98
ldrh r0, [r0]
ldrh r1, [r1]
subs r0, r1
strh r0, [r2]
ldr r2, _0805AE68 @ =gSpriteCoordOffsetY
- ldr r0, _0805AE6C @ =gUnknown_3005068
+ ldr r0, _0805AE6C @ =gTotalCameraPixelOffsetY
ldr r1, _0805AE70 @ =gUnknown_3000E9A
ldrh r0, [r0]
ldrh r1, [r1]
@@ -1203,10 +1203,10 @@ _0805AE36:
.align 2, 0
_0805AE58: .4byte gUnknown_3000EA0
_0805AE5C: .4byte gSpriteCoordOffsetX
-_0805AE60: .4byte gUnknown_300506C
+_0805AE60: .4byte gTotalCameraPixelOffsetX
_0805AE64: .4byte gUnknown_3000E98
_0805AE68: .4byte gSpriteCoordOffsetY
-_0805AE6C: .4byte gUnknown_3005068
+_0805AE6C: .4byte gTotalCameraPixelOffsetY
_0805AE70: .4byte gUnknown_3000E9A
thumb_func_end UpdateCameraPanning
diff --git a/asm/field_effect.s b/asm/field_effect.s
deleted file mode 100644
index 91ea68461..000000000
--- a/asm/field_effect.s
+++ /dev/null
@@ -1,9666 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start FieldEffectStart
-FieldEffectStart: @ 8083444
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl FieldEffectActiveListAdd
- ldr r0, _08083484 @ =gUnknown_81D96AC
- lsls r4, 2
- adds r4, r0
- ldr r0, [r4]
- str r0, [sp]
- add r4, sp, 0x4
- ldr r5, _08083488 @ =gUnknown_83CBE30
-_08083462:
- ldr r0, [sp]
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r5
- ldr r2, [r0]
- mov r0, sp
- adds r1, r4, 0
- bl _call_via_r2
- lsls r0, 24
- cmp r0, 0
- bne _08083462
- ldr r0, [sp, 0x4]
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08083484: .4byte gUnknown_81D96AC
-_08083488: .4byte gUnknown_83CBE30
- thumb_func_end FieldEffectStart
-
- thumb_func_start FieldEffectCmd_loadtiles
-FieldEffectCmd_loadtiles: @ 808348C
- push {lr}
- ldr r1, [r0]
- adds r1, 0x1
- str r1, [r0]
- bl FieldEffectScript_LoadTiles
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_loadtiles
-
- thumb_func_start FieldEffectCmd_loadfadedpal
-FieldEffectCmd_loadfadedpal: @ 80834A0
- push {lr}
- ldr r1, [r0]
- adds r1, 0x1
- str r1, [r0]
- bl sub_8083614
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_loadfadedpal
-
- thumb_func_start FieldEffectCmd_loadpal
-FieldEffectCmd_loadpal: @ 80834B4
- push {lr}
- ldr r1, [r0]
- adds r1, 0x1
- str r1, [r0]
- bl sub_808365C
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_loadpal
-
- thumb_func_start FieldEffectCmd_callnative
-FieldEffectCmd_callnative: @ 80834C8
- push {lr}
- ldr r2, [r0]
- adds r2, 0x1
- str r2, [r0]
- bl FieldEffectScript_CallNative
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_callnative
-
- thumb_func_start sub_80834DC
-sub_80834DC: @ 80834DC
- movs r0, 0
- bx lr
- thumb_func_end sub_80834DC
-
- thumb_func_start FieldEffectCmd_loadgfx_callnative
-FieldEffectCmd_loadgfx_callnative: @ 80834E0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
- adds r0, r4, 0
- bl FieldEffectScript_LoadTiles
- adds r0, r4, 0
- bl sub_8083614
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldEffectScript_CallNative
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_loadgfx_callnative
-
- thumb_func_start FieldEffectCmd_loadtiles_callnative
-FieldEffectCmd_loadtiles_callnative: @ 8083508
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
- adds r0, r4, 0
- bl FieldEffectScript_LoadTiles
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldEffectScript_CallNative
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_loadtiles_callnative
-
- thumb_func_start FieldEffectCmd_loadfadedpal_callnative
-FieldEffectCmd_loadfadedpal_callnative: @ 808352C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
- adds r0, r4, 0
- bl sub_8083614
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldEffectScript_CallNative
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_loadfadedpal_callnative
-
- thumb_func_start FieldEffectScript_ReadWord
-FieldEffectScript_ReadWord: @ 8083550
- ldr r2, [r0]
- ldrb r0, [r2]
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- adds r0, r1
- ldrb r1, [r2, 0x2]
- lsls r1, 16
- adds r0, r1
- ldrb r1, [r2, 0x3]
- lsls r1, 24
- adds r0, r1
- bx lr
- thumb_func_end FieldEffectScript_ReadWord
-
- thumb_func_start FieldEffectScript_LoadTiles
-FieldEffectScript_LoadTiles: @ 8083568
- push {r4,r5,lr}
- adds r4, r0, 0
- bl FieldEffectScript_ReadWord
- adds r5, r0, 0
- ldrh r0, [r5, 0x6]
- bl GetSpriteTileStartByTag
- lsls r0, 16
- ldr r1, _08083594 @ =0xffff0000
- cmp r0, r1
- bne _08083586
- adds r0, r5, 0
- bl LoadSpriteSheet
-_08083586:
- ldr r0, [r4]
- adds r0, 0x4
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08083594: .4byte 0xffff0000
- thumb_func_end FieldEffectScript_LoadTiles
-
- thumb_func_start sub_8083598
-sub_8083598: @ 8083598
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080835B4 @ =gUnknown_2036E28
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _080835B8
- cmp r0, 0x1
- ble _08083606
- cmp r0, 0x2
- beq _080835CC
- cmp r0, 0x3
- beq _080835E0
- b _08083606
- .align 2, 0
-_080835B4: .4byte gUnknown_2036E28
-_080835B8:
- adds r4, 0x10
- lsls r0, r4, 5
- ldr r1, _080835C8 @ =gPlttBufferUnfaded
- adds r0, r1
- movs r1, 0x10
- bl TintPalette_GrayScale
- b _080835F6
- .align 2, 0
-_080835C8: .4byte gPlttBufferUnfaded
-_080835CC:
- adds r4, 0x10
- lsls r0, r4, 5
- ldr r1, _080835DC @ =gPlttBufferUnfaded
- adds r0, r1
- movs r1, 0x10
- bl TintPalette_SepiaTone
- b _080835F6
- .align 2, 0
-_080835DC: .4byte gPlttBufferUnfaded
-_080835E0:
- adds r4, 0x10
- lsls r0, r4, 4
- movs r1, 0x10
- bl sub_8111F38
- lsls r0, r4, 5
- ldr r1, _0808360C @ =gPlttBufferUnfaded
- adds r0, r1
- movs r1, 0x10
- bl TintPalette_GrayScale
-_080835F6:
- lsls r1, r4, 5
- ldr r0, _0808360C @ =gPlttBufferUnfaded
- adds r0, r1, r0
- ldr r2, _08083610 @ =gPlttBufferFaded
- adds r1, r2
- movs r2, 0x8
- bl CpuFastSet
-_08083606:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808360C: .4byte gPlttBufferUnfaded
-_08083610: .4byte gPlttBufferFaded
- thumb_func_end sub_8083598
-
- thumb_func_start sub_8083614
-sub_8083614: @ 8083614
- push {r4-r6,lr}
- adds r6, r0, 0
- bl FieldEffectScript_ReadWord
- adds r5, r0, 0
- ldrh r0, [r5, 0x4]
- bl IndexOfSpritePaletteTag
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- bl LoadSpritePalette
- cmp r4, 0xFF
- bne _08083642
- ldrh r0, [r5, 0x4]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- bl sub_8083598
-_08083642:
- ldrh r0, [r5, 0x4]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- bl sub_807AA8C
- ldr r0, [r6]
- adds r0, 0x4
- str r0, [r6]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8083614
-
- thumb_func_start sub_808365C
-sub_808365C: @ 808365C
- push {r4-r6,lr}
- adds r6, r0, 0
- bl FieldEffectScript_ReadWord
- adds r5, r0, 0
- ldrh r0, [r5, 0x4]
- bl IndexOfSpritePaletteTag
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- bl LoadSpritePalette
- cmp r4, 0xFF
- beq _0808368A
- ldrh r0, [r5, 0x4]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- bl sub_8083598
-_0808368A:
- ldr r0, [r6]
- adds r0, 0x4
- str r0, [r6]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_808365C
-
- thumb_func_start FieldEffectScript_CallNative
-FieldEffectScript_CallNative: @ 8083698
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl FieldEffectScript_ReadWord
- bl _call_via_r0
- str r0, [r5]
- ldr r0, [r4]
- adds r0, 0x4
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end FieldEffectScript_CallNative
-
- thumb_func_start FieldEffectFreeGraphicsResources
-FieldEffectFreeGraphicsResources: @ 80836B4
- push {r4,r5,lr}
- adds r1, r0, 0
- adds r1, 0x40
- ldrh r5, [r1]
- ldrb r4, [r0, 0x5]
- lsrs r4, 4
- bl DestroySprite
- adds r0, r5, 0
- bl FieldEffectFreeTilesIfUnused
- adds r0, r4, 0
- bl FieldEffectFreePaletteIfUnused
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end FieldEffectFreeGraphicsResources
-
- thumb_func_start FieldEffectStop
-FieldEffectStop: @ 80836D8
- push {r4,lr}
- lsls r4, r1, 24
- lsrs r4, 24
- bl FieldEffectFreeGraphicsResources
- adds r0, r4, 0
- bl FieldEffectActiveListRemove
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end FieldEffectStop
-
- thumb_func_start FieldEffectFreeTilesIfUnused
-FieldEffectFreeTilesIfUnused: @ 80836F0
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl GetSpriteTileTagByTileStart
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r0, _0808374C @ =0x0000ffff
- cmp r3, r0
- beq _08083744
- movs r2, 0
- ldr r5, _08083750 @ =gSprites
-_0808370A:
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r5
- adds r0, r1, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _08083734
- adds r0, r1, 0
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- bge _08083734
- adds r0, r1, 0
- adds r0, 0x40
- ldrh r0, [r0]
- cmp r4, r0
- beq _08083744
-_08083734:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3F
- bls _0808370A
- adds r0, r3, 0
- bl FreeSpriteTilesByTag
-_08083744:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808374C: .4byte 0x0000ffff
-_08083750: .4byte gSprites
- thumb_func_end FieldEffectFreeTilesIfUnused
-
- thumb_func_start FieldEffectFreePaletteIfUnused
-FieldEffectFreePaletteIfUnused: @ 8083754
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl GetSpritePaletteTagByPaletteNum
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, _080837A4 @ =0x0000ffff
- cmp r5, r0
- beq _0808379C
- movs r2, 0
- ldr r6, _080837A8 @ =gSprites
- adds r3, r4, 0
-_08083770:
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r6
- adds r0, r1, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _0808378C
- ldrb r0, [r1, 0x5]
- lsrs r0, 4
- cmp r0, r3
- beq _0808379C
-_0808378C:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3F
- bls _08083770
- adds r0, r5, 0
- bl FreeSpritePaletteByTag
-_0808379C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080837A4: .4byte 0x0000ffff
-_080837A8: .4byte gSprites
- thumb_func_end FieldEffectFreePaletteIfUnused
-
- thumb_func_start FieldEffectActiveListClear
-FieldEffectActiveListClear: @ 80837AC
- push {r4,lr}
- movs r2, 0
- ldr r4, _080837CC @ =gUnknown_3000FC8
- movs r3, 0xFF
-_080837B4:
- adds r0, r2, r4
- ldrb r1, [r0]
- orrs r1, r3
- strb r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1F
- bls _080837B4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080837CC: .4byte gUnknown_3000FC8
- thumb_func_end FieldEffectActiveListClear
-
- thumb_func_start FieldEffectActiveListAdd
-FieldEffectActiveListAdd: @ 80837D0
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- movs r2, 0
- ldr r4, _080837E8 @ =gUnknown_3000FC8
-_080837DA:
- adds r1, r2, r4
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _080837EC
- strb r3, [r1]
- b _080837F6
- .align 2, 0
-_080837E8: .4byte gUnknown_3000FC8
-_080837EC:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1F
- bls _080837DA
-_080837F6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end FieldEffectActiveListAdd
-
- thumb_func_start FieldEffectActiveListRemove
-FieldEffectActiveListRemove: @ 80837FC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- movs r2, 0
- ldr r4, _08083818 @ =gUnknown_3000FC8
- movs r5, 0xFF
-_08083808:
- adds r1, r2, r4
- ldrb r0, [r1]
- cmp r0, r3
- bne _0808381C
- orrs r0, r5
- strb r0, [r1]
- b _08083826
- .align 2, 0
-_08083818: .4byte gUnknown_3000FC8
-_0808381C:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1F
- bls _08083808
-_08083826:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end FieldEffectActiveListRemove
-
- thumb_func_start FieldEffectActiveListContains
-FieldEffectActiveListContains: @ 808382C
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0
- ldr r3, _08083844 @ =gUnknown_3000FC8
-_08083836:
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, r2
- bne _08083848
- movs r0, 0x1
- b _08083854
- .align 2, 0
-_08083844: .4byte gUnknown_3000FC8
-_08083848:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x1F
- bls _08083836
- movs r0, 0
-_08083854:
- pop {r1}
- bx r1
- thumb_func_end FieldEffectActiveListContains
-
- thumb_func_start CreateTrainerSprite
-CreateTrainerSprite: @ 8083858
- 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, _080838E0 @ =gTrainerFrontPicPaletteTable
- mov r8, r3
- add r8, r4
- mov r0, r8
- adds r1, r7, 0
- bl LoadCompressedSpritePaletteOverrideBuffer
- ldr r0, _080838E4 @ =gTrainerFrontPicTable
- adds r4, r0
- adds r0, r4, 0
- adds r1, r7, 0
- bl LoadCompressedSpriteSheetOverrideBuffer
- 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, _080838E8 @ =gUnknown_83CBE50
- str r0, [sp, 0x4]
- ldr r0, _080838EC @ =gDummySpriteAnimTable
- str r0, [sp, 0x8]
- str r2, [sp, 0xC]
- ldr r0, _080838F0 @ =gDummySpriteAffineAnimTable
- str r0, [sp, 0x10]
- ldr r0, _080838F4 @ =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
-_080838E0: .4byte gTrainerFrontPicPaletteTable
-_080838E4: .4byte gTrainerFrontPicTable
-_080838E8: .4byte gUnknown_83CBE50
-_080838EC: .4byte gDummySpriteAnimTable
-_080838F0: .4byte gDummySpriteAffineAnimTable
-_080838F4: .4byte SpriteCallbackDummy
- thumb_func_end CreateTrainerSprite
-
- thumb_func_start LoadTrainerGfx_TrainerCard
-LoadTrainerGfx_TrainerCard: @ 80838F8
- 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, _08083928 @ =gTrainerFrontPicTable
- lsrs r4, 21
- adds r0, r4, r0
- ldr r0, [r0]
- bl LZDecompressVram
- ldr r0, _0808392C @ =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
-_08083928: .4byte gTrainerFrontPicTable
-_0808392C: .4byte gTrainerFrontPicPaletteTable
- thumb_func_end LoadTrainerGfx_TrainerCard
-
- thumb_func_start AddNewGameBirchObject
-AddNewGameBirchObject: @ 8083930
- 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, _08083968 @ =gUnknown_83CBE70
- bl LoadSpritePalette
- ldr r0, _0808396C @ =gUnknown_83CBE84
- 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
-_08083968: .4byte gUnknown_83CBE70
-_0808396C: .4byte gUnknown_83CBE84
- thumb_func_end AddNewGameBirchObject
-
- thumb_func_start sub_8083970
-sub_8083970: @ 8083970
- push {r4,r5,lr}
- sub sp, 0x10
- lsls r0, 16
- lsrs r0, 16
- movs r3, 0x80
- lsls r3, 8
- lsls r1, 16
- asrs r1, 16
- str r1, [sp]
- lsls r2, 16
- asrs r2, 16
- str r2, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- ldr r1, _080839C0 @ =gMonPaletteTable
- lsls r4, r0, 3
- adds r4, r1
- ldrh r1, [r4, 0x4]
- str r1, [sp, 0xC]
- movs r1, 0
- adds r2, r3, 0
- movs r3, 0x1
- bl CreateMonPicSprite_HandleDeoxys
- lsls r0, 16
- lsrs r5, r0, 16
- ldrh r0, [r4, 0x4]
- bl IndexOfSpritePaletteTag
- adds r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- bl sub_807B084
- ldr r0, _080839C4 @ =0x0000ffff
- cmp r5, r0
- beq _080839C8
- lsls r0, r5, 24
- lsrs r0, 24
- b _080839CA
- .align 2, 0
-_080839C0: .4byte gMonPaletteTable
-_080839C4: .4byte 0x0000ffff
-_080839C8:
- movs r0, 0x40
-_080839CA:
- add sp, 0x10
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8083970
-
- thumb_func_start sub_80839D4
-sub_80839D4: @ 80839D4
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x10
- adds r6, r0, 0
- mov r9, r1
- mov r10, r2
- adds r4, r3, 0
- ldr r5, [sp, 0x2C]
- lsls r6, 16
- lsrs r6, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- mov r8, r0
- lsls r4, 16
- asrs r4, 16
- str r4, [sp]
- lsls r5, 16
- asrs r5, 16
- str r5, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- mov r1, r8
- ldrh r0, [r1, 0x4]
- str r0, [sp, 0xC]
- adds r0, r6, 0
- mov r1, r9
- mov r2, r10
- movs r3, 0x1
- bl CreateMonPicSprite_HandleDeoxys
- lsls r0, 16
- lsrs r4, r0, 16
- mov r1, r8
- ldrh r0, [r1, 0x4]
- bl IndexOfSpritePaletteTag
- adds r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- bl sub_807B084
- ldr r0, _08083A44 @ =0x0000ffff
- cmp r4, r0
- beq _08083A48
- lsls r0, r4, 24
- lsrs r0, 24
- b _08083A4A
- .align 2, 0
-_08083A44: .4byte 0x0000ffff
-_08083A48:
- movs r0, 0x40
-_08083A4A:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80839D4
-
- thumb_func_start sub_8083A5C
-sub_8083A5C: @ 8083A5C
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- bl sub_807B0B4
- ldrb r0, [r4, 0x1]
- lsls r0, 30
- cmp r0, 0
- beq _08083A7A
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
-_08083A7A:
- adds r0, r5, 0
- bl FreeAndDestroyMonPicSprite
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8083A5C
-
- thumb_func_start MultiplyInvertedPaletteRGBComponents
-MultiplyInvertedPaletteRGBComponents: @ 8083A88
- 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, _08083B0C @ =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, _08083B10 @ =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
-_08083B0C: .4byte gPlttBufferUnfaded
-_08083B10: .4byte gPlttBufferFaded
- thumb_func_end MultiplyInvertedPaletteRGBComponents
-
- thumb_func_start MultiplyPaletteRGBComponents
-MultiplyPaletteRGBComponents: @ 8083B14
- 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, _08083B84 @ =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, _08083B88 @ =gPlttBufferFaded
- adds r0, r1
- strh r4, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08083B84: .4byte gPlttBufferUnfaded
-_08083B88: .4byte gPlttBufferFaded
- thumb_func_end MultiplyPaletteRGBComponents
-
- thumb_func_start sub_8083B8C
-sub_8083B8C: @ 8083B8C
- push {r4,lr}
- bl CalculatePlayerPartyCount
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08083BC8 @ =sub_8083BD0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08083BCC @ =gTasks
- adds r1, r0
- strh r4, [r1, 0xA]
- movs r0, 0x5D
- strh r0, [r1, 0xC]
- movs r0, 0x24
- strh r0, [r1, 0xE]
- movs r0, 0x80
- strh r0, [r1, 0x10]
- movs r0, 0x18
- strh r0, [r1, 0x12]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08083BC8: .4byte sub_8083BD0
-_08083BCC: .4byte gTasks
- thumb_func_end sub_8083B8C
-
- thumb_func_start sub_8083BD0
-sub_8083BD0: @ 8083BD0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08083BF8 @ =gTasks
- adds r1, r0
- ldr r2, _08083BFC @ =gUnknown_83CBFD0
- 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
-_08083BF8: .4byte gTasks
-_08083BFC: .4byte gUnknown_83CBFD0
- thumb_func_end sub_8083BD0
-
- thumb_func_start PokecenterHealEffect_0
-PokecenterHealEffect_0: @ 8083C00
- 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 sub_8083E14
- 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: @ 8083C3C
- push {r4,lr}
- adds r2, r0, 0
- ldr r3, _08083C74 @ =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 _08083C6E
- 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]
-_08083C6E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08083C74: .4byte gSprites
- thumb_func_end PokecenterHealEffect_1
-
- thumb_func_start sub_8083C78
-sub_8083C78: @ 8083C78
- push {lr}
- adds r3, r0, 0
- ldr r2, _08083C9C @ =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 _08083C98
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_08083C98:
- pop {r0}
- bx r0
- .align 2, 0
-_08083C9C: .4byte gSprites
- thumb_func_end sub_8083C78
-
- thumb_func_start PokecenterHealEffect_3
-PokecenterHealEffect_3: @ 8083CA0
- push {lr}
- ldr r2, _08083CD8 @ =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 _08083CD2
- adds r0, r1, 0
- bl DestroySprite
- movs r0, 0x19
- bl FieldEffectActiveListRemove
- ldr r0, _08083CDC @ =sub_8083BD0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08083CD2:
- pop {r0}
- bx r0
- .align 2, 0
-_08083CD8: .4byte gSprites
-_08083CDC: .4byte sub_8083BD0
- thumb_func_end PokecenterHealEffect_3
-
- thumb_func_start sub_8083CE0
-sub_8083CE0: @ 8083CE0
- push {r4,lr}
- bl CalculatePlayerPartyCount
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08083D14 @ =sub_8083D1C
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08083D18 @ =gTasks
- adds r1, r0
- strh r4, [r1, 0xA]
- movs r0, 0x75
- strh r0, [r1, 0xC]
- movs r0, 0x3C
- strh r0, [r1, 0xE]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08083D14: .4byte sub_8083D1C
-_08083D18: .4byte gTasks
- thumb_func_end sub_8083CE0
-
- thumb_func_start sub_8083D1C
-sub_8083D1C: @ 8083D1C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08083D44 @ =gTasks
- adds r1, r0
- ldr r2, _08083D48 @ =gUnknown_83CBFE0
- 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
-_08083D44: .4byte gTasks
-_08083D48: .4byte gUnknown_83CBFE0
- thumb_func_end sub_8083D1C
-
- thumb_func_start HallOfFameRecordEffect_0
-HallOfFameRecordEffect_0: @ 8083D4C
- 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 sub_8083E14
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x14]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end HallOfFameRecordEffect_0
-
- thumb_func_start sub_8083D74
-sub_8083D74: @ 8083D74
- push {r4,lr}
- adds r4, r0, 0
- ldr r2, _08083DA8 @ =gSprites
- movs r0, 0x14
- ldrsh r1, [r4, 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 _08083DA2
- movs r0, 0x78
- movs r1, 0x19
- bl sub_808428C
- ldrh r0, [r4, 0x26]
- adds r0, 0x1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08083DA2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08083DA8: .4byte gSprites
- thumb_func_end sub_8083D74
-
- thumb_func_start sub_8083DAC
-sub_8083DAC: @ 8083DAC
- push {lr}
- adds r3, r0, 0
- ldr r2, _08083DD0 @ =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 _08083DCC
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_08083DCC:
- pop {r0}
- bx r0
- .align 2, 0
-_08083DD0: .4byte gSprites
- thumb_func_end sub_8083DAC
-
- thumb_func_start sub_8083DD4
-sub_8083DD4: @ 8083DD4
- push {lr}
- ldr r2, _08083E0C @ =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 _08083E06
- adds r0, r1, 0
- bl DestroySprite
- movs r0, 0x3E
- bl FieldEffectActiveListRemove
- ldr r0, _08083E10 @ =sub_8083D1C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08083E06:
- pop {r0}
- bx r0
- .align 2, 0
-_08083E0C: .4byte gSprites
-_08083E10: .4byte sub_8083D1C
- thumb_func_end sub_8083DD4
-
- thumb_func_start sub_8083E14
-sub_8083E14: @ 8083E14
- 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, _08083E68 @ =sub_8083E70
- bl CreateInvisibleSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r2, _08083E6C @ =gSprites
- adds r1, r2
- strh r4, [r1, 0x24]
- strh r5, [r1, 0x26]
- adds r3, r1, 0
- adds r3, 0x43
- movs r2, 0xFF
- strb r2, [r3]
- 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
-_08083E68: .4byte sub_8083E70
-_08083E6C: .4byte gSprites
- thumb_func_end sub_8083E14
-
- thumb_func_start sub_8083E70
-sub_8083E70: @ 8083E70
- push {lr}
- ldr r2, _08083E88 @ =gUnknown_83CBFF0
- 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
-_08083E88: .4byte gUnknown_83CBFF0
- thumb_func_end sub_8083E70
-
- thumb_func_start PokeballGlowEffect_0
-PokeballGlowEffect_0: @ 8083E8C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x30]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08083EA4
- subs r0, r1, 0x1
- strh r0, [r4, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _08083F00
-_08083EA4:
- movs r0, 0x19
- strh r0, [r4, 0x30]
- ldr r0, _08083F18 @ =gUnknown_83CBF88
- ldr r1, _08083F1C @ =gUnknown_83CC010
- 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, 0xFF
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08083F20 @ =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
-_08083F00:
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08083F12
- movs r0, 0x20
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_08083F12:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08083F18: .4byte gUnknown_83CBF88
-_08083F1C: .4byte gUnknown_83CC010
-_08083F20: .4byte gSprites
- thumb_func_end PokeballGlowEffect_0
-
- thumb_func_start PokeballGlowEffect_1
-PokeballGlowEffect_1: @ 8083F24
- 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 _08083F54
- 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 _08083F54
- movs r0, 0x80
- lsls r0, 1
- bl PlayFanfare
-_08083F54:
- pop {r0}
- bx r0
- thumb_func_end PokeballGlowEffect_1
-
- thumb_func_start PokeballGlowEffect_2
-PokeballGlowEffect_2: @ 8083F58
- 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 _08083F88
- 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 _08083F88
- ldrh r0, [r7, 0x34]
- adds r0, 0x1
- strh r0, [r7, 0x34]
-_08083F88:
- ldrh r4, [r7, 0x32]
- adds r4, 0x3
- movs r0, 0x3
- mov r8, r0
- mov r1, r8
- ands r4, r1
- ldr r3, _08084080 @ =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, _08084084 @ =gUnknown_83CC028
- adds r1, r4, r6
- ldrb r1, [r1]
- ldr r5, _08084088 @ =gUnknown_83CC02C
- adds r2, r4, r5
- ldrb r2, [r2]
- ldr r3, _0808408C @ =gUnknown_83CC030
- 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, _08084090 @ =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, _08084094 @ =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 _08084072
- 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]
-_08084072:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08084080: .4byte 0x00001007
-_08084084: .4byte gUnknown_83CC028
-_08084088: .4byte gUnknown_83CC02C
-_0808408C: .4byte gUnknown_83CC030
-_08084090: .4byte 0x01050000
-_08084094: .4byte 0x01030000
- thumb_func_end PokeballGlowEffect_2
-
- thumb_func_start PokeballGlowEffect_3
-PokeballGlowEffect_3: @ 8084098
- 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 _080840C8
- 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 _080840C8
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
- movs r0, 0x1E
- strh r0, [r2, 0x30]
-_080840C8:
- ldrh r4, [r2, 0x32]
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08084174 @ =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, _08084178 @ =gUnknown_83CC028
- adds r1, r4, r1
- ldrb r6, [r1]
- ldr r1, _0808417C @ =gUnknown_83CC02C
- adds r1, r4, r1
- ldrb r5, [r1]
- ldr r1, _08084180 @ =gUnknown_83CC030
- 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, _08084184 @ =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, _08084188 @ =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
-_08084174: .4byte 0x00001007
-_08084178: .4byte gUnknown_83CC028
-_0808417C: .4byte gUnknown_83CC02C
-_08084180: .4byte gUnknown_83CC030
-_08084184: .4byte 0x01050000
-_08084188: .4byte 0x01030000
- thumb_func_end PokeballGlowEffect_3
-
- thumb_func_start PokeballGlowEffect_4
-PokeballGlowEffect_4: @ 808418C
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- subs r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080841A2
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
-_080841A2:
- pop {r0}
- bx r0
- thumb_func_end PokeballGlowEffect_4
-
- thumb_func_start PokeballGlowEffect_5
-PokeballGlowEffect_5: @ 80841A8
- 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: @ 80841B0
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080841C6
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _080841CC
-_080841C6:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_080841CC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end PokeballGlowEffect_6
-
- thumb_func_start nullsub_50
-nullsub_50: @ 80841D4
- bx lr
- thumb_func_end nullsub_50
-
- thumb_func_start SpriteCB_PokeballGlow
-SpriteCB_PokeballGlow: @ 80841D8
- push {lr}
- adds r3, r0, 0
- ldr r2, _080841FC @ =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 _080841F8
- adds r0, r3, 0
- bl FieldEffectFreeGraphicsResources
-_080841F8:
- pop {r0}
- bx r0
- .align 2, 0
-_080841FC: .4byte gSprites
- thumb_func_end SpriteCB_PokeballGlow
-
- thumb_func_start PokecenterHealEffectHelper
-PokecenterHealEffectHelper: @ 8084200
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- ldr r0, _08084244 @ =gUnknown_83CBFA0
- lsls r3, 16
- asrs r3, 16
- lsls r2, 16
- asrs r2, 16
- adds r1, r3, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r1, _08084248 @ =gSprites
- adds r2, r1
- ldrb r3, [r2, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- movs r3, 0x8
- orrs r1, r3
- strb r1, [r2, 0x5]
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r3, 0x4
- orrs r1, r3
- strb r1, [r2]
- pop {r1}
- bx r1
- .align 2, 0
-_08084244: .4byte gUnknown_83CBFA0
-_08084248: .4byte gSprites
- thumb_func_end PokecenterHealEffectHelper
-
- thumb_func_start sub_808424C
-sub_808424C: @ 808424C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _08084270
- 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
-_08084270:
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08084284
- adds r0, r4, 0
- bl FieldEffectFreeGraphicsResources
-_08084284:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_808424C
-
- thumb_func_start sub_808428C
-sub_808428C: @ 808428C
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- ldr r0, _080842A8 @ =gUnknown_83CBFB8
- lsls r3, 16
- asrs r3, 16
- lsls r2, 16
- asrs r2, 16
- adds r1, r3, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- pop {r0}
- bx r0
- .align 2, 0
-_080842A8: .4byte gUnknown_83CBFB8
- thumb_func_end sub_808428C
-
- thumb_func_start sub_80842AC
-sub_80842AC: @ 80842AC
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080842C2
- adds r0, r2, 0
- bl FieldEffectFreeGraphicsResources
-_080842C2:
- pop {r0}
- bx r0
- thumb_func_end sub_80842AC
-
- thumb_func_start sub_80842C8
-sub_80842C8: @ 80842C8
- push {lr}
- ldr r0, _080842DC @ =CB2_ReturnToField
- bl SetMainCallback2
- ldr r1, _080842E0 @ =gFieldCallback
- ldr r0, _080842E4 @ =mapldr_080842E8
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080842DC: .4byte CB2_ReturnToField
-_080842E0: .4byte gFieldCallback
-_080842E4: .4byte mapldr_080842E8
- thumb_func_end sub_80842C8
-
- thumb_func_start mapldr_080842E8
-mapldr_080842E8: @ 80842E8
- push {lr}
- bl sub_807DC00
- ldr r0, _08084308 @ =task00_8084310
- movs r1, 0
- bl CreateTask
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- ldr r1, _0808430C @ =gFieldCallback
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08084308: .4byte task00_8084310
-_0808430C: .4byte gFieldCallback
- thumb_func_end mapldr_080842E8
-
- thumb_func_start task00_8084310
-task00_8084310: @ 8084310
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0808437C @ =gTasks
- adds r4, r0, r1
- movs r0, 0x8
- ldrsh r6, [r4, r0]
- cmp r6, 0
- bne _08084350
- bl IsWeatherNotFadingIn
- lsls r0, 24
- cmp r0, 0
- beq _08084376
- bl GetCursorSelectionMonId
- ldr r1, _08084380 @ =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- cmp r0, 0x5
- ble _08084344
- str r6, [r1]
-_08084344:
- movs r0, 0x1F
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08084350:
- movs r0, 0x1F
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08084376
- bl sub_8054CA0
- bl WarpIntoMap
- ldr r0, _08084384 @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r1, _08084388 @ =gFieldCallback
- ldr r0, _0808438C @ =mapldr_08084390
- str r0, [r1]
- adds r0, r5, 0
- bl DestroyTask
-_08084376:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808437C: .4byte gTasks
-_08084380: .4byte gFieldEffectArguments
-_08084384: .4byte CB2_LoadMap
-_08084388: .4byte gFieldCallback
-_0808438C: .4byte mapldr_08084390
- thumb_func_end task00_8084310
-
- thumb_func_start mapldr_08084390
-mapldr_08084390: @ 8084390
- push {r4,lr}
- bl Overworld_PlaySpecialMapMusic
- bl sub_807DC00
- ldr r0, _080843E8 @ =c3_080843F8
- movs r1, 0
- bl CreateTask
- ldr r4, _080843EC @ =gObjectEvents
- ldr r3, _080843F0 @ =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 _080843D2
- ldrb r1, [r3, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x3
- bl ObjectEventTurn
-_080843D2:
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- ldr r1, _080843F4 @ =gFieldCallback
- movs r0, 0
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080843E8: .4byte c3_080843F8
-_080843EC: .4byte gObjectEvents
-_080843F0: .4byte gPlayerAvatar
-_080843F4: .4byte gFieldCallback
- thumb_func_end mapldr_08084390
-
- thumb_func_start c3_080843F8
-c3_080843F8: @ 80843F8
- 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, _0808444C @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0808442A
- ldr r0, _08084450 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08084444
- movs r0, 0x20
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0808442A:
- movs r0, 0x20
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08084444
- bl ScriptContext2_Disable
- bl UnfreezeObjectEvents
- adds r0, r5, 0
- bl DestroyTask
-_08084444:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808444C: .4byte gTasks
-_08084450: .4byte gPaletteFade
- thumb_func_end c3_080843F8
-
- thumb_func_start sub_8084454
-sub_8084454: @ 8084454
- push {lr}
- bl Overworld_PlaySpecialMapMusic
- bl pal_fill_for_maplights
- bl sub_8111CF0
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- ldr r0, _0808447C @ =sub_8084484
- movs r1, 0
- bl CreateTask
- ldr r1, _08084480 @ =gFieldCallback
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0808447C: .4byte sub_8084484
-_08084480: .4byte gFieldCallback
- thumb_func_end sub_8084454
-
- thumb_func_start sub_8084484
-sub_8084484: @ 8084484
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080844B4 @ =gTasks
- adds r4, r1, r0
- ldr r5, _080844B8 @ =gUnknown_83CC034
-_08084496:
- 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 _08084496
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080844B4: .4byte gTasks
-_080844B8: .4byte gUnknown_83CC034
- thumb_func_end sub_8084484
-
- thumb_func_start sub_80844BC
-sub_80844BC: @ 80844BC
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- mov r9, r0
- ldr r6, _08084558 @ =gPlayerAvatar
- ldrb r0, [r6, 0x5]
- lsls r5, r0, 3
- adds r5, r0
- lsls r5, 2
- ldr r0, _0808455C @ =gObjectEvents
- mov r8, r0
- add r5, r8
- ldrb r0, [r6, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08084560 @ =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 GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- bl GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl ObjectEventSetHeldMovement
- 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
-_08084558: .4byte gPlayerAvatar
-_0808455C: .4byte gObjectEvents
-_08084560: .4byte gSprites
- thumb_func_end sub_80844BC
-
- thumb_func_start sub_8084564
-sub_8084564: @ 8084564
- push {r4,lr}
- adds r4, r0, 0
- bl IsWeatherNotFadingIn
- lsls r0, 24
- cmp r0, 0
- beq _08084578
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08084578:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8084564
-
- thumb_func_start sub_8084580
-sub_8084580: @ 8084580
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, _080845E4 @ =gPlayerAvatar
- ldrb r0, [r6, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080845E8 @ =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, _080845EC @ =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, _080845F0 @ =gObjectEvents
- 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, 0x25
- 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
-_080845E4: .4byte gPlayerAvatar
-_080845E8: .4byte gSprites
-_080845EC: .4byte gSpriteCoordOffsetY
-_080845F0: .4byte gObjectEvents
- thumb_func_end sub_8084580
-
- thumb_func_start sub_80845F4
-sub_80845F4: @ 80845F4
- push {r4-r6,lr}
- adds r4, r0, 0
- ldr r2, _080846A0 @ =gPlayerAvatar
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080846A4 @ =gObjectEvents
- adds r6, r0, r1
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080846A8 @ =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 _08084636
- ldrh r1, [r4, 0xC]
- adds r0, r2, r1
- strh r0, [r4, 0xC]
- movs r1, 0xF
- ands r0, r1
- cmp r0, 0
- beq _08084636
- lsls r0, r2, 1
- strh r0, [r4, 0xA]
-_08084636:
- ldrh r2, [r4, 0xE]
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08084674
- movs r0, 0x26
- ldrsh r1, [r5, r0]
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- blt _08084674
- 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]
-_08084674:
- movs r1, 0x26
- ldrsh r0, [r5, r1]
- cmp r0, 0
- blt _08084698
- movs r0, 0xCF
- 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]
-_08084698:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080846A0: .4byte gPlayerAvatar
-_080846A4: .4byte gObjectEvents
-_080846A8: .4byte gSprites
- thumb_func_end sub_80845F4
-
- thumb_func_start sub_80846AC
-sub_80846AC: @ 80846AC
- 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_80846AC
-
- thumb_func_start sub_80846C8
-sub_80846C8: @ 80846C8
- 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 _080846F0
- lsls r0, r2, 16
- asrs r0, 17
- strh r0, [r4, 0xA]
-_080846F0:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080846FE
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080846FE:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80846C8
-
- thumb_func_start sub_8084708
-sub_8084708: @ 8084708
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _08084778 @ =gPlayerAvatar
- movs r0, 0
- strb r0, [r1, 0x6]
- bl ScriptContext2_Disable
- bl CameraObjectReset1
- bl UnfreezeObjectEvents
- bl InstallCameraPanAheadCallback
- 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, 16
- lsrs r0, 16
- bl sub_8055B38
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08084760
- ldr r0, _0808477C @ =0x00004001
- movs r1, 0x1
- bl VarSet
- movs r0, 0x8
- bl SetPlayerAvatarTransitionFlags
- movs r0, 0x16
- bl HelpSystem_SetSomeVariable2
-_08084760:
- ldr r0, _08084780 @ =sub_8084484
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08084778: .4byte gPlayerAvatar
-_0808477C: .4byte 0x00004001
-_08084780: .4byte sub_8084484
- thumb_func_end sub_8084708
-
- thumb_func_start sub_8084784
-sub_8084784: @ 8084784
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _080847B8 @ =sub_80847C0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080847BC @ =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 _080847B0
- movs r0, 0x1
- strh r0, [r1, 0xA]
-_080847B0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080847B8: .4byte sub_80847C0
-_080847BC: .4byte gTasks
- thumb_func_end sub_8084784
-
- thumb_func_start sub_80847C0
-sub_80847C0: @ 80847C0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080847F0 @ =gTasks
- adds r4, r1, r0
- ldr r5, _080847F4 @ =gUnknown_83CC050
-_080847D2:
- 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 _080847D2
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080847F0: .4byte gTasks
-_080847F4: .4byte gUnknown_83CC050
- thumb_func_end sub_80847C0
-
- thumb_func_start sub_80847F8
-sub_80847F8: @ 80847F8
- push {r4,lr}
- adds r4, r0, 0
- bl FreezeObjectEvents
- bl CameraObjectReset2
- ldrb r0, [r4, 0xA]
- bl StartEscalator
- movs r0, 0x1
- bl sub_81128BC
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80847F8
-
- thumb_func_start sub_8084820
-sub_8084820: @ 8084820
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08084888 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0808488C @ =gObjectEvents
- adds r4, r0, r1
- adds r0, r4, 0
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- beq _0808484A
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _0808487E
-_0808484A:
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- bl GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetHeldMovement
- 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 _08084878
- movs r0, 0x4
- strh r0, [r5, 0x8]
-_08084878:
- movs r0, 0x49
- bl PlaySE
-_0808487E:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08084888: .4byte gPlayerAvatar
-_0808488C: .4byte gObjectEvents
- thumb_func_end sub_8084820
-
- thumb_func_start sub_8084890
-sub_8084890: @ 8084890
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80848F8
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x3
- ble _080848AA
- bl sub_8084990
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080848AA:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8084890
-
- thumb_func_start sub_80848B4
-sub_80848B4: @ 80848B4
- push {lr}
- bl sub_80848F8
- bl sub_80849A0
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_80848B4
-
- thumb_func_start sub_80848C4
-sub_80848C4: @ 80848C4
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8084944
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x3
- ble _080848DE
- bl sub_8084990
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080848DE:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80848C4
-
- thumb_func_start sub_80848E8
-sub_80848E8: @ 80848E8
- push {lr}
- bl sub_8084944
- bl sub_80849A0
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_80848E8
-
- thumb_func_start sub_80848F8
-sub_80848F8: @ 80848F8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _0808493C @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08084940 @ =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 _08084936
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
-_08084936:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808493C: .4byte gPlayerAvatar
-_08084940: .4byte gSprites
- thumb_func_end sub_80848F8
-
- thumb_func_start sub_8084944
-sub_8084944: @ 8084944
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08084988 @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0808498C @ =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 _08084982
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
-_08084982:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08084988: .4byte gPlayerAvatar
-_0808498C: .4byte gSprites
- thumb_func_end sub_8084944
-
- thumb_func_start sub_8084990
-sub_8084990: @ 8084990
- push {lr}
- bl sub_8055F88
- bl sub_807DC18
- pop {r0}
- bx r0
- thumb_func_end sub_8084990
-
- thumb_func_start sub_80849A0
-sub_80849A0: @ 80849A0
- push {lr}
- ldr r0, _080849E0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080849DC
- bl BGMusicStopped
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080849DC
- bl StopEscalator
- bl WarpIntoMap
- ldr r1, _080849E4 @ =gFieldCallback
- ldr r0, _080849E8 @ =sub_80849F4
- str r0, [r1]
- ldr r0, _080849EC @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r0, _080849F0 @ =sub_80847C0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080849DC:
- pop {r0}
- bx r0
- .align 2, 0
-_080849E0: .4byte gPaletteFade
-_080849E4: .4byte gFieldCallback
-_080849E8: .4byte sub_80849F4
-_080849EC: .4byte CB2_LoadMap
-_080849F0: .4byte sub_80847C0
- thumb_func_end sub_80849A0
-
- thumb_func_start sub_80849F4
-sub_80849F4: @ 80849F4
- push {lr}
- bl Overworld_PlaySpecialMapMusic
- bl pal_fill_for_maplights
- bl sub_8111CF0
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- ldr r0, _08084A1C @ =sub_8084A24
- movs r1, 0
- bl CreateTask
- ldr r1, _08084A20 @ =gFieldCallback
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08084A1C: .4byte sub_8084A24
-_08084A20: .4byte gFieldCallback
- thumb_func_end sub_80849F4
-
- thumb_func_start sub_8084A24
-sub_8084A24: @ 8084A24
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08084A54 @ =gTasks
- adds r4, r1, r0
- ldr r5, _08084A58 @ =gUnknown_83CC068
-_08084A36:
- 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 _08084A36
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08084A54: .4byte gTasks
-_08084A58: .4byte gUnknown_83CC068
- thumb_func_end sub_8084A24
-
- thumb_func_start sub_8084A5C
-sub_8084A5C: @ 8084A5C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- bl CameraObjectReset2
- ldr r0, _08084ABC @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _08084AC0 @ =gObjectEvents
- adds r4, r0
- movs r0, 0x4
- bl GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetHeldMovement
- 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 _08084AC4
- movs r1, 0x1
- movs r0, 0x3
- strh r0, [r5, 0x8]
- b _08084AC6
- .align 2, 0
-_08084ABC: .4byte gPlayerAvatar
-_08084AC0: .4byte gObjectEvents
-_08084AC4:
- movs r1, 0
-_08084AC6:
- adds r0, r1, 0
- bl StartEscalator
- movs r0, 0x1
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8084A5C
-
- thumb_func_start sub_8084AD8
-sub_8084AD8: @ 8084AD8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08084B10 @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08084B14 @ =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
-_08084B10: .4byte gPlayerAvatar
-_08084B14: .4byte gSprites
- thumb_func_end sub_8084AD8
-
- thumb_func_start sub_8084B18
-sub_8084B18: @ 8084B18
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, _08084B70 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08084B74 @ =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 _08084B56
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
-_08084B56:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08084B66
- strh r0, [r5, 0x24]
- strh r0, [r5, 0x26]
- movs r0, 0x5
- strh r0, [r4, 0x8]
-_08084B66:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08084B70: .4byte gPlayerAvatar
-_08084B74: .4byte gSprites
- thumb_func_end sub_8084B18
-
- thumb_func_start sub_8084B78
-sub_8084B78: @ 8084B78
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08084BB0 @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08084BB4 @ =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
-_08084BB0: .4byte gPlayerAvatar
-_08084BB4: .4byte gSprites
- thumb_func_end sub_8084B78
-
- thumb_func_start sub_8084BB8
-sub_8084BB8: @ 8084BB8
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, _08084C10 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08084C14 @ =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 _08084BF6
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
-_08084BF6:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08084C08
- strh r0, [r5, 0x24]
- strh r0, [r5, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08084C08:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08084C10: .4byte gPlayerAvatar
-_08084C14: .4byte gSprites
- thumb_func_end sub_8084BB8
-
- thumb_func_start sub_8084C18
-sub_8084C18: @ 8084C18
- push {r4,lr}
- adds r4, r0, 0
- bl IsEscalatorMoving
- lsls r0, 24
- cmp r0, 0
- bne _08084C34
- bl StopEscalator
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- b _08084C36
-_08084C34:
- movs r0, 0
-_08084C36:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8084C18
-
- thumb_func_start sub_8084C3C
-sub_8084C3C: @ 8084C3C
- push {r4,lr}
- ldr r0, _08084C94 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08084C98 @ =gObjectEvents
- adds r4, r0, r1
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _08084C8A
- bl CameraObjectReset1
- bl ScriptContext2_Disable
- bl UnfreezeObjectEvents
- movs r0, 0x4
- bl GetWalkNormalMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetHeldMovement
- ldr r0, _08084C9C @ =sub_8084A24
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0x2
- bl sub_81128BC
-_08084C8A:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08084C94: .4byte gPlayerAvatar
-_08084C98: .4byte gObjectEvents
-_08084C9C: .4byte sub_8084A24
- thumb_func_end sub_8084C3C
-
- thumb_func_start oei_waterfall
-oei_waterfall: @ 8084CA0
- push {r4,lr}
- ldr r4, _08084CCC @ =sub_8084CD8
- adds r0, r4, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08084CD0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r2, _08084CD4 @ =gFieldEffectArguments
- ldr r2, [r2]
- strh r2, [r1, 0xA]
- bl _call_via_r4
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08084CCC: .4byte sub_8084CD8
-_08084CD0: .4byte gTasks
-_08084CD4: .4byte gFieldEffectArguments
- thumb_func_end oei_waterfall
-
- thumb_func_start sub_8084CD8
-sub_8084CD8: @ 8084CD8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _08084D14 @ =gUnknown_83CC084
- ldr r2, _08084D18 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_08084CEA:
- movs r0, 0x8
- ldrsh r2, [r4, r0]
- lsls r2, 2
- adds r2, r5
- ldr r0, _08084D1C @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _08084D20 @ =gObjectEvents
- adds r1, r0
- ldr r2, [r2]
- adds r0, r4, 0
- bl _call_via_r2
- lsls r0, 24
- cmp r0, 0
- bne _08084CEA
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08084D14: .4byte gUnknown_83CC084
-_08084D18: .4byte gTasks
-_08084D1C: .4byte gPlayerAvatar
-_08084D20: .4byte gObjectEvents
- thumb_func_end sub_8084CD8
-
- thumb_func_start sub_8084D24
-sub_8084D24: @ 8084D24
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- ldr r1, _08084D40 @ =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
-_08084D40: .4byte gPlayerAvatar
- thumb_func_end sub_8084D24
-
- thumb_func_start waterfall_1_do_anim_probably
-waterfall_1_do_anim_probably: @ 8084D44
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl ScriptContext2_Enable
- adds r0, r5, 0
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- bne _08084D74
- adds r0, r5, 0
- bl ObjectEventClearHeldMovementIfFinished
- ldr r1, _08084D7C @ =gFieldEffectArguments
- 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]
-_08084D74:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08084D7C: .4byte gFieldEffectArguments
- thumb_func_end waterfall_1_do_anim_probably
-
- thumb_func_start waterfall_2_wait_anim_finish_probably
-waterfall_2_wait_anim_finish_probably: @ 8084D80
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x6
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08084D9A
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- b _08084D9C
-_08084D9A:
- movs r0, 0
-_08084D9C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end waterfall_2_wait_anim_finish_probably
-
- thumb_func_start sub_8084DA4
-sub_8084DA4: @ 8084DA4
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- movs r0, 0x2
- bl sub_8063F2C
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetHeldMovement
- 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_8084DA4
-
- thumb_func_start sub_8084DCC
-sub_8084DCC: @ 8084DCC
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- bne _08084DE2
- movs r0, 0
- b _08084E1E
-_08084DE2:
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsWaterfall
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _08084E18
- bl ScriptContext2_Disable
- ldr r0, _08084E10 @ =gPlayerAvatar
- strb r4, [r0, 0x6]
- ldr r0, _08084E14 @ =sub_8084CD8
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0x2B
- bl FieldEffectActiveListRemove
- movs r0, 0
- b _08084E1E
- .align 2, 0
-_08084E10: .4byte gPlayerAvatar
-_08084E14: .4byte sub_8084CD8
-_08084E18:
- movs r0, 0x3
- strh r0, [r5, 0x8]
- movs r0, 0x1
-_08084E1E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8084DCC
-
- thumb_func_start FldEff_UseDive
-FldEff_UseDive: @ 8084E24
- push {r4,lr}
- ldr r4, _08084E54 @ =sub_8084E60
- adds r0, r4, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08084E58 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r3, _08084E5C @ =gFieldEffectArguments
- 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
-_08084E54: .4byte sub_8084E60
-_08084E58: .4byte gTasks
-_08084E5C: .4byte gFieldEffectArguments
- thumb_func_end FldEff_UseDive
-
- thumb_func_start sub_8084E60
-sub_8084E60: @ 8084E60
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _08084E90 @ =gUnknown_83CC098
- ldr r2, _08084E94 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_08084E72:
- 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 _08084E72
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08084E90: .4byte gUnknown_83CC098
-_08084E94: .4byte gTasks
- thumb_func_end sub_8084E60
-
- thumb_func_start dive_1_lock
-dive_1_lock: @ 8084E98
- ldr r2, _08084EA8 @ =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
-_08084EA8: .4byte gPlayerAvatar
- thumb_func_end dive_1_lock
-
- thumb_func_start dive_2_unknown
-dive_2_unknown: @ 8084EAC
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- ldr r1, _08084ED0 @ =gFieldEffectArguments
- 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
-_08084ED0: .4byte gFieldEffectArguments
- thumb_func_end dive_2_unknown
-
- thumb_func_start dive_3_unknown
-dive_3_unknown: @ 8084ED4
- 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 _08084F18
- ldr r2, _08084F20 @ =gObjectEvents
- ldr r0, _08084F24 @ =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, _08084F28 @ =sub_8084E60
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0x2C
- bl FieldEffectActiveListRemove
-_08084F18:
- movs r0, 0
- add sp, 0x8
- pop {r1}
- bx r1
- .align 2, 0
-_08084F20: .4byte gObjectEvents
-_08084F24: .4byte gPlayerAvatar
-_08084F28: .4byte sub_8084E60
- thumb_func_end dive_3_unknown
-
- thumb_func_start sub_8084F2C
-sub_8084F2C: @ 8084F2C
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _08084F40 @ =sub_8084F44
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_08084F40: .4byte sub_8084F44
- thumb_func_end sub_8084F2C
-
- thumb_func_start sub_8084F44
-sub_8084F44: @ 8084F44
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r6, _08084F8C @ =gUnknown_83CC0A4
- ldr r2, _08084F90 @ =gTasks
- ldr r5, _08084F94 @ =gPlayerAvatar
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_08084F58:
- 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, _08084F98 @ =gObjectEvents
- adds r1, r0
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _08084F9C @ =gSprites
- adds r2, r0
- ldr r3, [r3]
- adds r0, r4, 0
- bl _call_via_r3
- lsls r0, 24
- cmp r0, 0
- bne _08084F58
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08084F8C: .4byte gUnknown_83CC0A4
-_08084F90: .4byte gTasks
-_08084F94: .4byte gPlayerAvatar
-_08084F98: .4byte gObjectEvents
-_08084F9C: .4byte gSprites
- thumb_func_end sub_8084F44
-
- thumb_func_start sub_8084FA0
-sub_8084FA0: @ 8084FA0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl FreezeObjectEvents
- bl CameraObjectReset2
- movs r0, 0
- bl SetCameraPanningCallback
- ldr r0, _08084FD4 @ =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
-_08084FD4: .4byte gPlayerAvatar
- thumb_func_end sub_8084FA0
-
- thumb_func_start sub_8084FD8
-sub_8084FD8: @ 8084FD8
- 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 _08085004
- movs r0, 0
- strh r0, [r4, 0xC]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08085004:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8084FD8
-
- thumb_func_start sub_808500C
-sub_808500C: @ 808500C
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0
- strh r0, [r2, 0x26]
- movs r0, 0x1
- strh r0, [r4, 0xE]
- ldr r3, _08085054 @ =gFieldEffectArguments
- 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, 0xAB
- 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
-_08085054: .4byte gFieldEffectArguments
- thumb_func_end sub_808500C
-
- thumb_func_start sub_8085058
-sub_8085058: @ 8085058
- 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 _08085092
- movs r0, 0x1
- ands r1, r0
- cmp r1, 0
- bne _080850A4
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x3
- bgt _080850A4
- lsls r0, r2, 1
- b _080850A2
-_08085092:
- movs r0, 0x4
- ands r1, r0
- cmp r1, 0
- bne _080850A4
- lsls r0, r2, 16
- cmp r0, 0
- ble _080850A4
- asrs r0, 17
-_080850A2:
- strh r0, [r4, 0xA]
-_080850A4:
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x6
- ble _080850F0
- 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, _080850E8 @ =gSpriteCoordOffsetY
- movs r7, 0
- ldrsh r1, [r1, r7]
- adds r0, r1
- asrs r2, 16
- adds r0, r2
- cmn r3, r0
- ble _080850EC
- 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 _080850F0
- adds r0, r1, 0x1
- strh r0, [r4, 0xE]
- b _080850F0
- .align 2, 0
-_080850E8: .4byte gSpriteCoordOffsetY
-_080850EC:
- movs r0, 0x1
- strh r0, [r4, 0x10]
-_080850F0:
- ldrh r2, [r4, 0x12]
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0808512E
- movs r7, 0x26
- ldrsh r1, [r5, r7]
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- bge _0808512E
- 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]
-_0808512E:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08085144
- movs r7, 0x10
- ldrsh r0, [r4, r7]
- cmp r0, 0
- beq _08085144
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08085144:
- movs r0, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8085058
-
- thumb_func_start sub_808514C
-sub_808514C: @ 808514C
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8055F88
- bl sub_807DC18
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_808514C
-
- thumb_func_start sub_8085168
-sub_8085168: @ 8085168
- push {lr}
- ldr r0, _080851A8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080851A0
- bl BGMusicStopped
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080851A0
- bl WarpIntoMap
- ldr r1, _080851AC @ =gFieldCallback
- ldr r0, _080851B0 @ =mapldr_080851BC
- str r0, [r1]
- ldr r0, _080851B4 @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r0, _080851B8 @ =sub_8084F44
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080851A0:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080851A8: .4byte gPaletteFade
-_080851AC: .4byte gFieldCallback
-_080851B0: .4byte mapldr_080851BC
-_080851B4: .4byte CB2_LoadMap
-_080851B8: .4byte sub_8084F44
- thumb_func_end sub_8085168
-
- thumb_func_start mapldr_080851BC
-mapldr_080851BC: @ 80851BC
- push {lr}
- bl Overworld_PlaySpecialMapMusic
- bl pal_fill_for_maplights
- bl sub_8111CF0
- bl ScriptContext2_Enable
- ldr r0, _080851E0 @ =gFieldCallback
- movs r1, 0
- str r1, [r0]
- ldr r0, _080851E4 @ =sub_80851E8
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080851E0: .4byte gFieldCallback
-_080851E4: .4byte sub_80851E8
- thumb_func_end mapldr_080851BC
-
- thumb_func_start sub_80851E8
-sub_80851E8: @ 80851E8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r6, _08085230 @ =gUnknown_83CC0BC
- ldr r2, _08085234 @ =gTasks
- ldr r5, _08085238 @ =gPlayerAvatar
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_080851FC:
- 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, _0808523C @ =gObjectEvents
- adds r1, r0
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _08085240 @ =gSprites
- adds r2, r0
- ldr r3, [r3]
- adds r0, r4, 0
- bl _call_via_r3
- lsls r0, 24
- cmp r0, 0
- bne _080851FC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08085230: .4byte gUnknown_83CC0BC
-_08085234: .4byte gTasks
-_08085238: .4byte gPlayerAvatar
-_0808523C: .4byte gObjectEvents
-_08085240: .4byte gSprites
- thumb_func_end sub_80851E8
-
- thumb_func_start sub_8085244
-sub_8085244: @ 8085244
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- bl CameraObjectReset2
- bl FreezeObjectEvents
- ldr r1, _08085270 @ =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
-_08085270: .4byte gPlayerAvatar
- thumb_func_end sub_8085244
-
- thumb_func_start sub_8085274
-sub_8085274: @ 8085274
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- bl IsWeatherNotFadingIn
- lsls r0, 24
- cmp r0, 0
- beq _080852B4
- ldr r1, _080852BC @ =gFieldEffectArguments
- 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]
-_080852B4:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080852BC: .4byte gFieldEffectArguments
- thumb_func_end sub_8085274
-
- thumb_func_start sub_80852C0
-sub_80852C0: @ 80852C0
- 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, _08085310 @ =gSprites
- adds r0, r1
- adds r0, 0x2B
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _08085308
- 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, 0xA8
- bl PlaySE
- movs r0, 0x4
- bl sub_8064194
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetHeldMovement
-_08085308:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08085310: .4byte gSprites
- thumb_func_end sub_80852C0
-
- thumb_func_start sub_8085314
-sub_8085314: @ 8085314
- push {lr}
- adds r0, r1, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _0808533E
- ldr r1, _08085344 @ =gPlayerAvatar
- movs r0, 0
- strb r0, [r1, 0x6]
- bl ScriptContext2_Disable
- bl UnfreezeObjectEvents
- ldr r0, _08085348 @ =sub_80851E8
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0808533E:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08085344: .4byte gPlayerAvatar
-_08085348: .4byte sub_80851E8
- thumb_func_end sub_8085314
-
- thumb_func_start FldEff_LavaridgeGymWarp
-FldEff_LavaridgeGymWarp: @ 808534C
- push {r4,lr}
- ldr r4, _080853A4 @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080853A8 @ =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, _080853AC @ =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
-_080853A4: .4byte gFieldEffectArguments
-_080853A8: .4byte gFieldEffectObjectTemplatePointers
-_080853AC: .4byte gSprites
- thumb_func_end FldEff_LavaridgeGymWarp
-
- thumb_func_start sub_80853B0
-sub_80853B0: @ 80853B0
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080853C8
- adds r0, r2, 0
- movs r1, 0x32
- bl FieldEffectStop
-_080853C8:
- pop {r0}
- bx r0
- thumb_func_end sub_80853B0
-
- thumb_func_start sub_80853CC
-sub_80853CC: @ 80853CC
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _080853E0 @ =sub_80853E4
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080853E0: .4byte sub_80853E4
- thumb_func_end sub_80853CC
-
- thumb_func_start sub_80853E4
-sub_80853E4: @ 80853E4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r6, _0808542C @ =gUnknown_83CC0CC
- ldr r2, _08085430 @ =gTasks
- ldr r5, _08085434 @ =gPlayerAvatar
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_080853F8:
- 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, _08085438 @ =gObjectEvents
- adds r1, r0
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _0808543C @ =gSprites
- adds r2, r0
- ldr r3, [r3]
- adds r0, r4, 0
- bl _call_via_r3
- lsls r0, 24
- cmp r0, 0
- bne _080853F8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808542C: .4byte gUnknown_83CC0CC
-_08085430: .4byte gTasks
-_08085434: .4byte gPlayerAvatar
-_08085438: .4byte gObjectEvents
-_0808543C: .4byte gSprites
- thumb_func_end sub_80853E4
-
- thumb_func_start sub_8085440
-sub_8085440: @ 8085440
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- bl FreezeObjectEvents
- bl CameraObjectReset2
- ldr r1, _0808546C @ =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
-_0808546C: .4byte gPlayerAvatar
- thumb_func_end sub_8085440
-
- thumb_func_start sub_8085470
-sub_8085470: @ 8085470
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- adds r6, r2, 0
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _080854E4
- ldrh r1, [r5, 0xA]
- movs r2, 0xA
- ldrsh r0, [r5, r2]
- cmp r0, 0x3
- ble _080854C4
- ldr r1, _080854C0 @ =gFieldEffectArguments
- 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 _080854E4
- .align 2, 0
-_080854C0: .4byte gFieldEffectArguments
-_080854C4:
- 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 ObjectEventSetHeldMovement
- movs r0, 0x21
- bl PlaySE
-_080854E4:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8085470
-
- thumb_func_start sub_80854EC
-sub_80854EC: @ 80854EC
- push {r4,lr}
- adds r3, r0, 0
- adds r4, r1, 0
- ldr r2, _08085520 @ =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 _08085516
- 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]
-_08085516:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08085520: .4byte gSprites
- thumb_func_end sub_80854EC
-
- thumb_func_start sub_8085524
-sub_8085524: @ 8085524
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x31
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08085542
- bl sub_8055F88
- bl sub_807DC18
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08085542:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8085524
-
- thumb_func_start sub_808554C
-sub_808554C: @ 808554C
- push {lr}
- ldr r0, _0808558C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08085584
- bl BGMusicStopped
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08085584
- bl WarpIntoMap
- ldr r1, _08085590 @ =gFieldCallback
- ldr r0, _08085594 @ =sub_8084454
- str r0, [r1]
- ldr r0, _08085598 @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r0, _0808559C @ =sub_80853E4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08085584:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0808558C: .4byte gPaletteFade
-_08085590: .4byte gFieldCallback
-_08085594: .4byte sub_8084454
-_08085598: .4byte CB2_LoadMap
-_0808559C: .4byte sub_80853E4
- thumb_func_end sub_808554C
-
- thumb_func_start FldEff_PopOutOfAsh
-FldEff_PopOutOfAsh: @ 80855A0
- push {r4,lr}
- ldr r4, _080855F8 @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080855FC @ =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, _08085600 @ =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
-_080855F8: .4byte gFieldEffectArguments
-_080855FC: .4byte gFieldEffectObjectTemplatePointers
-_08085600: .4byte gSprites
- thumb_func_end FldEff_PopOutOfAsh
-
- thumb_func_start sub_8085604
-sub_8085604: @ 8085604
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0808561C
- adds r0, r2, 0
- movs r1, 0x31
- bl FieldEffectStop
-_0808561C:
- pop {r0}
- bx r0
- thumb_func_end sub_8085604
-
- thumb_func_start sub_8085620
-sub_8085620: @ 8085620
- push {lr}
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- ldr r0, _08085638 @ =sub_808563C
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_08085638: .4byte sub_808563C
- thumb_func_end sub_8085620
-
- thumb_func_start sub_808563C
-sub_808563C: @ 808563C
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08085664 @ =gUnknown_83CC0E0
- ldr r2, _08085668 @ =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
-_08085664: .4byte gUnknown_83CC0E0
-_08085668: .4byte gTasks
- thumb_func_end sub_808563C
-
- thumb_func_start sub_808566C
-sub_808566C: @ 808566C
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- movs r5, 0
- strh r0, [r4, 0x8]
- movs r0, 0x40
- strh r0, [r4, 0x22]
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x24]
- strh r5, [r4, 0x26]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_808566C
-
- thumb_func_start sub_8085690
-sub_8085690: @ 8085690
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r0, _080856D4 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080856D8 @ =gObjectEvents
- adds r6, r0, r1
- adds r4, r5, 0
- adds r4, 0x8
- adds r1, r5, 0
- adds r1, 0xA
- adds r2, r5, 0
- adds r2, 0xC
- adds r0, r6, 0
- bl sub_808576C
- ldrh r1, [r4, 0x6]
- movs r2, 0x6
- ldrsh r0, [r4, r2]
- cmp r0, 0x3B
- bgt _080856DC
- adds r0, r1, 0x1
- strh r0, [r4, 0x6]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- bne _08085702
- movs r0, 0x27
- bl PlaySE
- b _08085702
- .align 2, 0
-_080856D4: .4byte gPlayerAvatar
-_080856D8: .4byte gObjectEvents
-_080856DC:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08085702
- adds r1, r5, 0
- adds r1, 0x12
- adds r2, r5, 0
- adds r2, 0x14
- adds r0, r6, 0
- bl sub_80857F0
- cmp r0, 0
- bne _08085702
- bl sub_8055F88
- bl sub_807DC18
- movs r0, 0x1
- strh r0, [r4, 0x8]
-_08085702:
- movs r2, 0x8
- ldrsh r0, [r4, r2]
- cmp r0, 0x1
- bne _08085750
- ldr r0, _08085758 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08085750
- bl BGMusicStopped
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08085750
- ldrh r1, [r5, 0x26]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl ObjectEventSetDirection
- bl sub_80555E0
- bl WarpIntoMap
- ldr r1, _0808575C @ =gFieldCallback
- ldr r0, _08085760 @ =sub_80859D4
- str r0, [r1]
- ldr r0, _08085764 @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r0, _08085768 @ =sub_808563C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08085750:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08085758: .4byte gPaletteFade
-_0808575C: .4byte gFieldCallback
-_08085760: .4byte sub_80859D4
-_08085764: .4byte CB2_LoadMap
-_08085768: .4byte sub_808563C
- thumb_func_end sub_8085690
-
- thumb_func_start sub_808576C
-sub_808576C: @ 808576C
- push {r4-r7,lr}
- adds r4, r0, 0
- adds r6, r1, 0
- adds r5, r2, 0
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- beq _0808578A
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _080857E4
-_0808578A:
- ldrh r1, [r6]
- movs r2, 0
- ldrsh r0, [r6, r2]
- cmp r0, 0
- beq _0808579E
- subs r0, r1, 0x1
- strh r0, [r6]
- lsls r0, 16
- cmp r0, 0
- bne _080857E4
-_0808579E:
- ldr r7, _080857E0 @ =gUnknown_83CC0E8
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- adds r0, r7
- ldrb r0, [r0]
- bl GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetHeldMovement
- ldrh r1, [r5]
- movs r2, 0
- ldrsh r0, [r5, r2]
- cmp r0, 0xB
- bgt _080857C8
- adds r0, r1, 0x1
- strh r0, [r5]
-_080857C8:
- movs r0, 0
- ldrsh r1, [r5, r0]
- movs r0, 0xC
- asrs r0, r1
- strh r0, [r6]
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- adds r0, r7
- ldrb r0, [r0]
- b _080857EA
- .align 2, 0
-_080857E0: .4byte gUnknown_83CC0E8
-_080857E4:
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
-_080857EA:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_808576C
-
- thumb_func_start sub_80857F0
-sub_80857F0: @ 80857F0
- push {r4-r7,lr}
- adds r7, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- ldrb r0, [r7, 0x4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08085818 @ =gSprites
- adds r4, r1, r0
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- beq _08085830
- cmp r0, 0x1
- bgt _0808581C
- cmp r0, 0
- beq _08085826
- b _0808589A
- .align 2, 0
-_08085818: .4byte gSprites
-_0808581C:
- cmp r0, 0x2
- beq _08085878
- cmp r0, 0x3
- beq _08085896
- b _0808589A
-_08085826:
- bl CameraObjectReset2
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_08085830:
- ldrh r0, [r4, 0x26]
- subs r0, 0x8
- strh r0, [r4, 0x26]
- ldrh r0, [r6]
- subs r0, 0x8
- strh r0, [r6]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x10
- negs r1, r1
- cmp r0, r1
- bgt _0808589A
- ldrb r0, [r7, 0x3]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r7, 0x3]
- ldrb r1, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x5]
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0
- strb r0, [r1]
- adds r2, r4, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- b _0808589A
-_08085878:
- ldrh r0, [r4, 0x26]
- subs r0, 0x8
- strh r0, [r4, 0x26]
- ldrh r0, [r6]
- subs r0, 0x8
- strh r0, [r6]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x58
- negs r1, r1
- cmp r0, r1
- bgt _0808589A
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_08085896:
- movs r0, 0
- b _0808589C
-_0808589A:
- movs r0, 0x1
-_0808589C:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80857F0
-
- thumb_func_start sub_80858A4
-sub_80858A4: @ 80858A4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r6, r0, 0
- adds r5, r1, 0
- adds r7, r2, 0
- mov r9, r3
- ldr r0, [sp, 0x20]
- mov r10, r0
- ldrb r0, [r6, 0x4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _080858D8 @ =gSprites
- adds r4, r1, r0
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- beq _08085948
- cmp r0, 0x1
- bgt _080858DC
- cmp r0, 0
- beq _080858E6
- b _080859C2
- .align 2, 0
-_080858D8: .4byte gSprites
-_080858DC:
- cmp r0, 0x2
- beq _0808599C
- cmp r0, 0x3
- beq _080859BE
- b _080859C2
-_080858E6:
- bl CameraObjectReset2
- movs r2, 0x58
- negs r2, r2
- adds r0, r2, 0
- strh r0, [r7]
- ldrh r0, [r4, 0x26]
- subs r0, 0x58
- movs r3, 0
- strh r0, [r4, 0x26]
- ldrb r0, [r4, 0x5]
- lsls r0, 28
- lsrs r0, 30
- mov r1, r9
- strh r0, [r1]
- movs r2, 0x43
- adds r2, r4
- mov r8, r2
- ldrb r0, [r2]
- mov r1, r10
- strh r0, [r1]
- movs r2, 0x42
- adds r2, r4
- mov r12, r2
- ldrb r0, [r2]
- lsrs r0, 6
- ldr r1, [sp, 0x24]
- strh r0, [r1]
- ldrb r0, [r6, 0x3]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r6, 0x3]
- ldrb r1, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x5]
- mov r2, r8
- strb r3, [r2]
- mov r0, r12
- ldrb r1, [r0]
- movs r0, 0x3F
- ands r0, r1
- mov r1, r12
- strb r0, [r1]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_08085948:
- ldrh r0, [r4, 0x26]
- adds r0, 0x4
- strh r0, [r4, 0x26]
- ldrh r0, [r7]
- adds r0, 0x4
- strh r0, [r7]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x10
- negs r1, r1
- cmp r0, r1
- blt _080859C2
- movs r0, 0x3
- mov r2, r9
- ldrb r1, [r2]
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- mov r1, r10
- ldrh r0, [r1]
- adds r1, r4, 0
- adds r1, 0x43
- strb r0, [r1]
- ldr r2, [sp, 0x24]
- ldrb r1, [r2]
- adds r3, r4, 0
- adds r3, 0x42
- lsls r1, 6
- ldrb r2, [r3]
- movs r0, 0x3F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- b _080859C2
-_0808599C:
- ldrh r0, [r4, 0x26]
- adds r0, 0x4
- strh r0, [r4, 0x26]
- ldrh r0, [r7]
- adds r0, 0x4
- strh r0, [r7]
- lsls r0, 16
- cmp r0, 0
- blt _080859C2
- movs r0, 0x1E
- bl PlaySE
- bl CameraObjectReset1
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_080859BE:
- movs r0, 0
- b _080859C4
-_080859C2:
- movs r0, 0x1
-_080859C4:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80858A4
-
- thumb_func_start sub_80859D4
-sub_80859D4: @ 80859D4
- push {lr}
- bl Overworld_PlaySpecialMapMusic
- bl pal_fill_for_maplights
- bl sub_8111CF0
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- ldr r1, _08085A14 @ =gFieldCallback
- movs r0, 0
- str r0, [r1]
- ldr r2, _08085A18 @ =gObjectEvents
- ldr r0, _08085A1C @ =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, _08085A20 @ =sub_8085A24
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_08085A14: .4byte gFieldCallback
-_08085A18: .4byte gObjectEvents
-_08085A1C: .4byte gPlayerAvatar
-_08085A20: .4byte sub_8085A24
- thumb_func_end sub_80859D4
-
- thumb_func_start sub_8085A24
-sub_8085A24: @ 8085A24
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08085A4C @ =gUnknown_83CC0F0
- ldr r2, _08085A50 @ =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
-_08085A4C: .4byte gUnknown_83CC0F0
-_08085A50: .4byte gTasks
- thumb_func_end sub_8085A24
-
- thumb_func_start sub_8085A54
-sub_8085A54: @ 8085A54
- push {r4,lr}
- adds r4, r0, 0
- bl IsWeatherNotFadingIn
- lsls r0, 24
- cmp r0, 0
- beq _08085A78
- movs r0, 0x28
- bl PlaySE
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08085A78:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8085A54
-
- thumb_func_start sub_8085A80
-sub_8085A80: @ 8085A80
- push {r4-r7,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r4, 0
- adds r5, 0x8
- ldr r0, _08085AD4 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08085AD8 @ =gObjectEvents
- adds r6, r0, r1
- adds r1, r4, 0
- adds r1, 0xA
- adds r2, r4, 0
- adds r2, 0xC
- adds r3, r4, 0
- adds r3, 0xE
- adds r0, r5, 0
- adds r0, 0x8
- str r0, [sp]
- adds r0, r4, 0
- adds r0, 0x12
- str r0, [sp, 0x4]
- adds r0, r6, 0
- bl sub_80858A4
- adds r7, r0, 0
- ldrb r1, [r6, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- strb r0, [r6, 0x1]
- ldrh r1, [r5, 0xC]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0x7
- bgt _08085ADC
- adds r0, r1, 0x1
- strh r0, [r5, 0xC]
- b _08085B10
- .align 2, 0
-_08085AD4: .4byte gPlayerAvatar
-_08085AD8: .4byte gObjectEvents
-_08085ADC:
- movs r2, 0xE
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _08085B10
- adds r0, r1, 0x1
- strh r0, [r5, 0xC]
- adds r1, r4, 0
- adds r1, 0x1A
- adds r2, r4, 0
- adds r2, 0x1C
- adds r0, r6, 0
- bl sub_808576C
- lsls r0, 24
- lsrs r1, r0, 24
- strh r1, [r5, 0x10]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0x31
- ble _08085B10
- movs r2, 0x1E
- ldrsh r0, [r5, r2]
- cmp r1, r0
- bne _08085B10
- movs r0, 0x1
- strh r0, [r5, 0xE]
-_08085B10:
- cmp r7, 0
- bne _08085B58
- movs r0, 0x10
- ldrsh r1, [r5, r0]
- movs r2, 0x1E
- ldrsh r0, [r5, r2]
- cmp r1, r0
- bne _08085B58
- adds r0, r6, 0
- bl ObjectEventCheckHeldMovementStatus
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08085B58
- ldrb r1, [r6, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- strb r0, [r6, 0x1]
- ldrb r1, [r6, 0x3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r6, 0x3]
- bl ScriptContext2_Disable
- bl UnfreezeObjectEvents
- ldr r0, _08085B60 @ =sub_8085A24
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08085B58:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08085B60: .4byte sub_8085A24
- thumb_func_end sub_8085A80
-
- thumb_func_start CreateTeleportFieldEffectTask
-CreateTeleportFieldEffectTask: @ 8085B64
- push {lr}
- ldr r0, _08085B74 @ =sub_8085B78
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_08085B74: .4byte sub_8085B78
- thumb_func_end CreateTeleportFieldEffectTask
-
- thumb_func_start sub_8085B78
-sub_8085B78: @ 8085B78
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08085BA0 @ =gUnknown_83CC0F8
- ldr r2, _08085BA4 @ =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
-_08085BA0: .4byte gUnknown_83CC0F8
-_08085BA4: .4byte gTasks
- thumb_func_end sub_8085B78
-
- thumb_func_start sub_8085BA8
-sub_8085BA8: @ 8085BA8
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- bl CameraObjectReset2
- bl GetPlayerFacingDirection
- 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_8085BA8
-
- thumb_func_start sub_8085BD0
-sub_8085BD0: @ 8085BD0
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _08085C54 @ =gUnknown_83CC108
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r0, _08085C58 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08085C5C @ =gObjectEvents
- adds r5, r0, r1
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08085C02
- subs r0, r1, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _08085C1C
-_08085C02:
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r1, [r0]
- adds r0, r5, 0
- bl ObjectEventTurn
- movs r0, 0x8
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
-_08085C1C:
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- ble _08085C4A
- movs r2, 0x26
- ldrsh r1, [r4, r2]
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- cmp r1, r0
- bne _08085C4A
- 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, 0x27
- bl PlaySE
-_08085C4A:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08085C54: .4byte gUnknown_83CC108
-_08085C58: .4byte gPlayerAvatar
-_08085C5C: .4byte gObjectEvents
- thumb_func_end sub_8085BD0
-
- thumb_func_start sub_8085C60
-sub_8085C60: @ 8085C60
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _08085D24 @ =gUnknown_83CC108
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r2, _08085D28 @ =gPlayerAvatar
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08085D2C @ =gObjectEvents
- adds r3, r0, r1
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08085D30 @ =gSprites
- adds r5, r0, r1
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bgt _08085CAA
- 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 ObjectEventTurn
-_08085CAA:
- 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 _08085CD6
- movs r0, 0x4
- strh r0, [r4, 0xC]
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, 0x7
- bgt _08085CD6
- lsls r0, r1, 1
- strh r0, [r4, 0xE]
-_08085CD6:
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r0, 0x8
- ble _08085D04
- 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 _08085D04
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
-_08085D04:
- movs r2, 0x10
- ldrsh r0, [r4, r2]
- cmp r0, 0xA7
- ble _08085D1A
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- bl sub_8055F88
- bl sub_807DC18
-_08085D1A:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08085D24: .4byte gUnknown_83CC108
-_08085D28: .4byte gPlayerAvatar
-_08085D2C: .4byte gObjectEvents
-_08085D30: .4byte gSprites
- thumb_func_end sub_8085C60
-
- thumb_func_start sub_8085D34
-sub_8085D34: @ 8085D34
- push {lr}
- ldr r0, _08085D74 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08085D70
- bl BGMusicStopped
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08085D70
- bl copy_saved_warp3_bank_and_enter_x_to_warp1
- bl WarpIntoMap
- ldr r0, _08085D78 @ =CB2_LoadMap
- bl SetMainCallback2
- ldr r1, _08085D7C @ =gFieldCallback
- ldr r0, _08085D80 @ =mapldr_08085D88
- str r0, [r1]
- ldr r0, _08085D84 @ =sub_8085B78
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08085D70:
- pop {r0}
- bx r0
- .align 2, 0
-_08085D74: .4byte gPaletteFade
-_08085D78: .4byte CB2_LoadMap
-_08085D7C: .4byte gFieldCallback
-_08085D80: .4byte mapldr_08085D88
-_08085D84: .4byte sub_8085B78
- thumb_func_end sub_8085D34
-
- thumb_func_start mapldr_08085D88
-mapldr_08085D88: @ 8085D88
- push {lr}
- bl Overworld_PlaySpecialMapMusic
- bl pal_fill_for_maplights
- bl sub_8111CF0
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- ldr r1, _08085DCC @ =gFieldCallback
- movs r0, 0
- str r0, [r1]
- ldr r2, _08085DD0 @ =gObjectEvents
- ldr r0, _08085DD4 @ =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, _08085DD8 @ =sub_8085DDC
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_08085DCC: .4byte gFieldCallback
-_08085DD0: .4byte gObjectEvents
-_08085DD4: .4byte gPlayerAvatar
-_08085DD8: .4byte sub_8085DDC
- thumb_func_end mapldr_08085D88
-
- thumb_func_start sub_8085DDC
-sub_8085DDC: @ 8085DDC
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08085E04 @ =gUnknown_83CC110
- ldr r2, _08085E08 @ =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
-_08085E04: .4byte gUnknown_83CC110
-_08085E08: .4byte gTasks
- thumb_func_end sub_8085DDC
-
- thumb_func_start sub_8085E0C
-sub_8085E0C: @ 8085E0C
- push {r4-r6,lr}
- adds r6, r0, 0
- bl IsWeatherNotFadingIn
- lsls r0, 24
- cmp r0, 0
- beq _08085E82
- ldr r5, _08085E88 @ =gPlayerAvatar
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _08085E8C @ =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, _08085E90 @ =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, _08085E94 @ =gObjectEvents
- 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 GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x26]
- movs r0, 0x27
- bl PlaySE
-_08085E82:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08085E88: .4byte gPlayerAvatar
-_08085E8C: .4byte gSprites
-_08085E90: .4byte gSpriteCoordOffsetY
-_08085E94: .4byte gObjectEvents
- thumb_func_end sub_8085E0C
-
- thumb_func_start sub_8085E98
-sub_8085E98: @ 8085E98
- push {r4-r7,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _08085F00 @ =gUnknown_83CC108
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r2, _08085F04 @ =gPlayerAvatar
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08085F08 @ =gObjectEvents
- adds r6, r0, r1
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08085F0C @ =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 _08085F10
- ldrh r1, [r4, 0x22]
- movs r2, 0x22
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _08085F36
- 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 _08085F36
- .align 2, 0
-_08085F00: .4byte gUnknown_83CC108
-_08085F04: .4byte gPlayerAvatar
-_08085F08: .4byte gObjectEvents
-_08085F0C: .4byte gSprites
-_08085F10:
- 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 _08085F36
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
-_08085F36:
- ldrh r2, [r5, 0x26]
- movs r3, 0x26
- ldrsh r1, [r5, r3]
- movs r0, 0x30
- negs r0, r0
- cmp r1, r0
- blt _08085F5A
- ldrh r1, [r4, 0xA]
- movs r3, 0xA
- ldrsh r0, [r4, r3]
- cmp r0, 0x1
- ble _08085F5A
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _08085F5A
- subs r0, r1, 0x1
- strh r0, [r4, 0xA]
-_08085F5A:
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- movs r7, 0
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _08085F7C
- 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 ObjectEventTurn
-_08085F7C:
- movs r1, 0x26
- ldrsh r0, [r5, r1]
- cmp r0, 0
- blt _08085F92
- 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]
-_08085F92:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8085E98
-
- thumb_func_start sub_8085F9C
-sub_8085F9C: @ 8085F9C
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _08086018 @ =gUnknown_83CC108
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r0, _0808601C @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086020 @ =gObjectEvents
- adds r5, r0, r1
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _08086010
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r1, [r0]
- adds r0, r5, 0
- bl ObjectEventTurn
- 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 _08086010
- movs r0, 0x24
- ldrsh r1, [r4, r0]
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- cmp r1, r0
- bne _08086010
- bl ScriptContext2_Disable
- bl CameraObjectReset1
- bl UnfreezeObjectEvents
- ldr r0, _08086024 @ =sub_8085DDC
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08086010:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086018: .4byte gUnknown_83CC108
-_0808601C: .4byte gPlayerAvatar
-_08086020: .4byte gObjectEvents
-_08086024: .4byte sub_8085DDC
- thumb_func_end sub_8085F9C
-
- thumb_func_start FldEff_FieldMoveShowMon
-FldEff_FieldMoveShowMon: @ 8086028
- push {r4,lr}
- bl GetCurrentMapType
- 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 _08086048
- ldr r0, _08086044 @ =sub_80860E0
- b _0808604A
- .align 2, 0
-_08086044: .4byte sub_80860E0
-_08086048:
- ldr r0, _08086078 @ =sub_8086468
-_0808604A:
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r2, _0808607C @ =gFieldEffectArguments
- ldr r0, [r2]
- ldr r1, [r2, 0x4]
- ldr r2, [r2, 0x8]
- bl sub_8086860
- ldr r2, _08086080 @ =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
-_08086078: .4byte sub_8086468
-_0808607C: .4byte gFieldEffectArguments
-_08086080: .4byte gTasks
- thumb_func_end FldEff_FieldMoveShowMon
-
- thumb_func_start FldEff_FieldMoveShowMonInit
-FldEff_FieldMoveShowMonInit: @ 8086084
- push {r4-r6,lr}
- ldr r5, _080860D8 @ =gFieldEffectArguments
- 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, _080860DC @ =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
-_080860D8: .4byte gFieldEffectArguments
-_080860DC: .4byte gPlayerParty
- thumb_func_end FldEff_FieldMoveShowMonInit
-
- thumb_func_start sub_80860E0
-sub_80860E0: @ 80860E0
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08086108 @ =gUnknown_83CC11C
- ldr r2, _0808610C @ =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
-_08086108: .4byte gUnknown_83CC11C
-_0808610C: .4byte gTasks
- thumb_func_end sub_80860E0
-
- thumb_func_start sub_8086110
-sub_8086110: @ 8086110
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x48
- bl GetGpuReg
- strh r0, [r4, 0x1E]
- movs r0, 0x4A
- bl GetGpuReg
- strh r0, [r4, 0x20]
- adds r0, r4, 0
- adds r0, 0x22
- ldr r1, _08086170 @ =gMain
- ldr r1, [r1, 0xC]
- bl StoreWordInTwoHalfwords
- ldr r1, _08086174 @ =0x0000f0f1
- strh r1, [r4, 0xA]
- ldr r0, _08086178 @ =0x00005051
- strh r0, [r4, 0xC]
- movs r0, 0x3F
- strh r0, [r4, 0xE]
- movs r0, 0x3E
- strh r0, [r4, 0x10]
- movs r0, 0x40
- bl SetGpuReg
- ldrh r1, [r4, 0xC]
- movs r0, 0x44
- bl SetGpuReg
- ldrh r1, [r4, 0xE]
- movs r0, 0x48
- bl SetGpuReg
- ldrh r1, [r4, 0x10]
- movs r0, 0x4A
- bl SetGpuReg
- ldr r0, _0808617C @ =sub_80863C0
- bl SetVBlankCallback
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08086170: .4byte gMain
-_08086174: .4byte 0x0000f0f1
-_08086178: .4byte 0x00005051
-_0808617C: .4byte sub_80863C0
- thumb_func_end sub_8086110
-
- thumb_func_start sub_8086180
-sub_8086180: @ 8086180
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x4
- mov r8, r0
- movs r0, 0x8
- bl GetGpuReg
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 18
- lsls r4, 30
- lsrs r4, 16
- movs r0, 0x8
- bl GetGpuReg
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 24
- lsls r5, 27
- lsrs r5, 16
- ldr r0, _080861F0 @ =gUnknown_83CB5F0
- movs r6, 0xC0
- lsls r6, 19
- adds r4, r6
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, 0
- bl CpuSet
- movs r0, 0
- str r0, [sp]
- adds r6, r5, r6
- ldr r2, _080861F4 @ =0x05000200
- mov r0, sp
- adds r1, r6, 0
- bl CpuSet
- ldr r0, _080861F8 @ =gUnknown_83CB7F0
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- adds r0, r5, 0
- bl sub_8086428
- mov r1, r8
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080861F0: .4byte gUnknown_83CB5F0
-_080861F4: .4byte 0x05000200
-_080861F8: .4byte gUnknown_83CB7F0
- thumb_func_end sub_8086180
-
- thumb_func_start sub_80861FC
-sub_80861FC: @ 80861FC
- 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 _08086228
- movs r2, 0
-_08086228:
- lsls r0, r4, 16
- asrs r0, 16
- cmp r0, 0x27
- bgt _08086232
- movs r4, 0x28
-_08086232:
- cmp r5, 0x78
- ble _08086238
- movs r5, 0x78
-_08086238:
- 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 _08086278
- cmp r4, 0x28
- bne _08086278
- cmp r1, 0x78
- bne _08086278
- ldr r2, _08086280 @ =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, _08086284 @ =sub_80868C0
- str r1, [r0]
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_08086278:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08086280: .4byte gSprites
-_08086284: .4byte sub_80868C0
- thumb_func_end sub_80861FC
-
- thumb_func_start sub_8086288
-sub_8086288: @ 8086288
- push {lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x12]
- subs r0, 0x10
- strh r0, [r3, 0x12]
- ldr r2, _080862B4 @ =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 _080862AE
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_080862AE:
- pop {r0}
- bx r0
- .align 2, 0
-_080862B4: .4byte gSprites
- thumb_func_end sub_8086288
-
- thumb_func_start sub_80862B8
-sub_80862B8: @ 80862B8
- 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 _080862E0
- movs r4, 0x50
-_080862E0:
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x50
- bgt _080862EA
- movs r2, 0x51
-_080862EA:
- 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 _08086306
- cmp r2, 0x51
- bne _08086306
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_08086306:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80862B8
-
- thumb_func_start sub_808630C
-sub_808630C: @ 808630C
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- movs r0, 0x8
- bl GetGpuReg
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 24
- lsls r1, 27
- lsrs r1, 16
- movs r0, 0
- str r0, [sp]
- movs r0, 0xC0
- lsls r0, 19
- adds r1, r0
- ldr r2, _08086354 @ =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
-_08086354: .4byte 0x05000200
- thumb_func_end sub_808630C
-
- thumb_func_start sub_8086358
-sub_8086358: @ 8086358
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r0, 0x22
- mov r1, sp
- bl LoadWordFromTwoHalfwords
- ldr r0, [sp]
- bl SetVBlankCallback
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- bl Menu_LoadStdPal
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080863B8 @ =gSprites
- adds r0, r1
- ldrh r1, [r4, 0x26]
- lsls r1, 24
- lsrs r1, 24
- bl sub_8083A5C
- movs r0, 0x6
- bl FieldEffectActiveListRemove
- ldr r0, _080863BC @ =sub_80860E0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080863B8: .4byte gSprites
-_080863BC: .4byte sub_80860E0
- thumb_func_end sub_8086358
-
- thumb_func_start sub_80863C0
-sub_80863C0: @ 80863C0
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _08086420 @ =sub_80860E0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, _08086424 @ =gTasks
- adds r4, r0
- adds r0, r4, 0
- adds r0, 0x22
- mov r1, sp
- bl LoadWordFromTwoHalfwords
- ldr r0, [sp]
- bl _call_via_r0
- ldrh r1, [r4, 0xA]
- movs r0, 0x40
- bl SetGpuReg
- ldrh r1, [r4, 0xC]
- movs r0, 0x44
- bl SetGpuReg
- ldrh r1, [r4, 0xE]
- movs r0, 0x48
- bl SetGpuReg
- ldrh r1, [r4, 0x10]
- movs r0, 0x4A
- bl SetGpuReg
- ldrh r1, [r4, 0x12]
- movs r0, 0x10
- bl SetGpuReg
- ldrh r1, [r4, 0x14]
- movs r0, 0x12
- bl SetGpuReg
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08086420: .4byte sub_80860E0
-_08086424: .4byte gTasks
- thumb_func_end sub_80863C0
-
- thumb_func_start sub_8086428
-sub_8086428: @ 8086428
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _0808645C @ =0x06000140
- adds r2, r0, r1
- movs r1, 0
- ldr r5, _08086460 @ =gUnknown_83CB810
- movs r0, 0xF0
- lsls r0, 8
- adds r4, r0, 0
- ldr r3, _08086464 @ =0x0000013f
-_0808643E:
- 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 _0808643E
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808645C: .4byte 0x06000140
-_08086460: .4byte gUnknown_83CB810
-_08086464: .4byte 0x0000013f
- thumb_func_end sub_8086428
-
- thumb_func_start sub_8086468
-sub_8086468: @ 8086468
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08086490 @ =gUnknown_83CC138
- ldr r2, _08086494 @ =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
-_08086490: .4byte gUnknown_83CC138
-_08086494: .4byte gTasks
- thumb_func_end sub_8086468
-
- thumb_func_start sub_8086498
-sub_8086498: @ 8086498
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0xA]
- movs r0, 0x10
- bl SetGpuReg
- ldrh r1, [r4, 0xC]
- movs r0, 0x12
- bl SetGpuReg
- adds r0, r4, 0
- adds r0, 0x22
- ldr r1, _080864CC @ =gMain
- ldr r1, [r1, 0xC]
- bl StoreWordInTwoHalfwords
- ldr r0, _080864D0 @ =sub_80866E0
- bl SetVBlankCallback
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080864CC: .4byte gMain
-_080864D0: .4byte sub_80866E0
- thumb_func_end sub_8086498
-
- thumb_func_start sub_80864D4
-sub_80864D4: @ 80864D4
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x4
- mov r9, r0
- movs r0, 0x8
- bl GetGpuReg
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 18
- lsls r5, 30
- lsrs r5, 16
- movs r0, 0x8
- bl GetGpuReg
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 24
- lsls r4, 27
- lsrs r4, 16
- movs r0, 0
- mov r8, r0
- mov r1, r9
- strh r4, [r1, 0x20]
- ldr r0, _08086548 @ =gUnknown_83CBA90
- movs r6, 0xC0
- lsls r6, 19
- adds r5, r6
- adds r1, r5, 0
- movs r2, 0x40
- bl CpuSet
- mov r0, r8
- str r0, [sp]
- adds r4, r6
- ldr r2, _0808654C @ =0x05000200
- mov r0, sp
- adds r1, r4, 0
- bl CpuSet
- ldr r0, _08086550 @ =gUnknown_83CBB10
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- mov r1, r9
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08086548: .4byte gUnknown_83CBA90
-_0808654C: .4byte 0x05000200
-_08086550: .4byte gUnknown_83CBB10
- thumb_func_end sub_80864D4
-
- thumb_func_start sub_8086554
-sub_8086554: @ 8086554
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8086738
- lsls r0, 24
- cmp r0, 0
- beq _080865A6
- movs r0, 0x48
- bl GetGpuReg
- strh r0, [r4, 0x12]
- movs r1, 0xFF
- ands r1, r0
- movs r2, 0x88
- lsls r2, 5
- adds r0, r2, 0
- orrs r1, r0
- movs r0, 0x48
- bl SetGpuReg
- movs r0, 0x42
- movs r1, 0xF0
- bl SetGpuReg
- ldr r1, _080865B4 @ =0x00002878
- movs r0, 0x46
- bl SetGpuReg
- ldr r2, _080865B8 @ =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, _080865BC @ =sub_80868C0
- str r1, [r0]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080865A6:
- adds r0, r4, 0
- bl sub_8086728
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080865B4: .4byte 0x00002878
-_080865B8: .4byte gSprites
-_080865BC: .4byte sub_80868C0
- thumb_func_end sub_8086554
-
- thumb_func_start sub_80865C0
-sub_80865C0: @ 80865C0
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8086728
- ldr r2, _080865EC @ =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 _080865E4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080865E4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080865EC: .4byte gSprites
- thumb_func_end sub_80865C0
-
- thumb_func_start sub_80865F0
-sub_80865F0: @ 80865F0
- push {r4,r5,lr}
- adds r4, r0, 0
- bl sub_8086728
- ldrh r1, [r4, 0xA]
- movs r0, 0x7
- ands r0, r1
- movs r1, 0
- strh r0, [r4, 0xE]
- strh r1, [r4, 0x10]
- ldr r5, _0808662C @ =0x0000ffff
- movs r0, 0x42
- adds r1, r5, 0
- bl SetGpuReg
- movs r0, 0x46
- adds r1, r5, 0
- bl SetGpuReg
- ldrh r1, [r4, 0x12]
- movs r0, 0x48
- bl SetGpuReg
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808662C: .4byte 0x0000ffff
- thumb_func_end sub_80865F0
-
- thumb_func_start sub_8086630
-sub_8086630: @ 8086630
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8086728
- adds r0, r4, 0
- bl sub_80867F0
- lsls r0, 24
- cmp r0, 0
- beq _0808664A
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0808664A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8086630
-
- thumb_func_start sub_8086650
-sub_8086650: @ 8086650
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- movs r0, 0x8
- bl GetGpuReg
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 24
- lsls r1, 27
- lsrs r1, 16
- movs r0, 0
- str r0, [sp]
- movs r0, 0xC0
- lsls r0, 19
- adds r1, r0
- ldr r2, _080866D4 @ =0x05000200
- mov r0, sp
- bl CpuSet
- adds r0, r4, 0
- adds r0, 0x22
- add r1, sp, 0x4
- bl LoadWordFromTwoHalfwords
- ldr r0, [sp, 0x4]
- bl SetVBlankCallback
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- bl Menu_LoadStdPal
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080866D8 @ =gSprites
- adds r0, r1
- ldrh r1, [r4, 0x26]
- lsls r1, 24
- lsrs r1, 24
- bl sub_8083A5C
- movs r0, 0x6
- bl FieldEffectActiveListRemove
- ldr r0, _080866DC @ =sub_8086468
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080866D4: .4byte 0x05000200
-_080866D8: .4byte gSprites
-_080866DC: .4byte sub_8086468
- thumb_func_end sub_8086650
-
- thumb_func_start sub_80866E0
-sub_80866E0: @ 80866E0
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _08086720 @ =sub_8086468
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, _08086724 @ =gTasks
- adds r4, r0
- adds r0, r4, 0
- adds r0, 0x22
- mov r1, sp
- bl LoadWordFromTwoHalfwords
- ldr r0, [sp]
- bl _call_via_r0
- ldrh r1, [r4, 0xA]
- movs r0, 0x10
- bl SetGpuReg
- ldrh r1, [r4, 0xC]
- movs r0, 0x12
- bl SetGpuReg
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08086720: .4byte sub_8086468
-_08086724: .4byte gTasks
- thumb_func_end sub_80866E0
-
- thumb_func_start sub_8086728
-sub_8086728: @ 8086728
- 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_8086728
-
- thumb_func_start sub_8086738
-sub_8086738: @ 8086738
- 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 _08086754
- movs r0, 0x1
- b _080867D8
-_08086754:
- 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 _080867D6
- 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, _080867E8 @ =0x06000140
- adds r1, r0
- mov r8, r1
- movs r4, 0
- ldr r7, _080867EC @ =gUnknown_83CBB30
- 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
-_08086798:
- 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 _08086798
- ldrh r0, [r5, 0x10]
- adds r0, 0x2
- strh r0, [r5, 0x10]
-_080867D6:
- movs r0, 0
-_080867D8:
- 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
-_080867E8: .4byte 0x06000140
-_080867EC: .4byte gUnknown_83CBB30
- thumb_func_end sub_8086738
-
- thumb_func_start sub_80867F0
-sub_80867F0: @ 80867F0
- push {r4-r7,lr}
- adds r5, r0, 0
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- cmp r0, 0x1F
- ble _08086800
- movs r0, 0x1
- b _08086854
-_08086800:
- 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 _08086852
- ldrh r0, [r5, 0xA]
- lsls r0, 16
- asrs r2, r0, 19
- movs r0, 0x1F
- ands r2, r0
- ldrh r0, [r5, 0x20]
- ldr r1, _0808685C @ =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
-_08086830:
- 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 _08086830
- ldrh r0, [r5, 0x10]
- adds r0, 0x2
- strh r0, [r5, 0x10]
-_08086852:
- movs r0, 0
-_08086854:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0808685C: .4byte 0x06000140
- thumb_func_end sub_80867F0
-
- thumb_func_start sub_8086860
-sub_8086860: @ 8086860
- 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, _080868B4 @ =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 sub_80839D4
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r1, _080868B8 @ =gSprites
- adds r2, r1
- ldr r1, _080868BC @ =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
-_080868B4: .4byte 0x7fffffff
-_080868B8: .4byte gSprites
-_080868BC: .4byte SpriteCallbackDummy
- thumb_func_end sub_8086860
-
- thumb_func_start sub_80868C0
-sub_80868C0: @ 80868C0
- 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 _08086900
- movs r0, 0x78
- strh r0, [r1, 0x20]
- movs r0, 0x1E
- strh r0, [r1, 0x30]
- ldr r0, _080868F4 @ =sub_8086904
- str r0, [r1, 0x1C]
- movs r2, 0x3A
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _080868F8
- ldrh r0, [r1, 0x2E]
- movs r1, 0
- movs r2, 0x7D
- movs r3, 0xA
- bl PlayCry2
- b _08086900
- .align 2, 0
-_080868F4: .4byte sub_8086904
-_080868F8:
- ldrh r0, [r1, 0x2E]
- movs r1, 0
- bl PlayCry1
-_08086900:
- pop {r0}
- bx r0
- thumb_func_end sub_80868C0
-
- thumb_func_start sub_8086904
-sub_8086904: @ 8086904
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- subs r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _08086918
- ldr r0, _0808691C @ =sub_8086920
- str r0, [r1, 0x1C]
-_08086918:
- pop {r0}
- bx r0
- .align 2, 0
-_0808691C: .4byte sub_8086920
- thumb_func_end sub_8086904
-
- thumb_func_start sub_8086920
-sub_8086920: @ 8086920
- 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 _08086938
- movs r0, 0x1
- strh r0, [r2, 0x3C]
- b _0808693E
-_08086938:
- adds r0, r3, 0
- subs r0, 0x14
- strh r0, [r2, 0x20]
-_0808693E:
- pop {r0}
- bx r0
- thumb_func_end sub_8086920
-
- thumb_func_start sub_8086944
-sub_8086944: @ 8086944
- push {r4,lr}
- ldr r0, _08086980 @ =sub_8086990
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08086984 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _08086988 @ =gFieldEffectArguments
- ldr r0, [r0]
- strh r0, [r1, 0x26]
- bl sav1_reset_battle_music_maybe
- ldr r4, _0808698C @ =0x00000131
- adds r0, r4, 0
- bl sub_8056124
- cmp r0, 0
- beq _08086978
- adds r0, r4, 0
- bl Overworld_ChangeMusicTo
-_08086978:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08086980: .4byte sub_8086990
-_08086984: .4byte gTasks
-_08086988: .4byte gFieldEffectArguments
-_0808698C: .4byte 0x00000131
- thumb_func_end sub_8086944
-
- thumb_func_start sub_8086990
-sub_8086990: @ 8086990
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _080869B8 @ =gUnknown_83CC154
- ldr r2, _080869BC @ =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
-_080869B8: .4byte gUnknown_83CC154
-_080869BC: .4byte gTasks
- thumb_func_end sub_8086990
-
- thumb_func_start sub_80869C0
-sub_80869C0: @ 80869C0
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- ldr r5, _08086A18 @ =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, _08086A1C @ =gObjectEvents
- 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
-_08086A18: .4byte gPlayerAvatar
-_08086A1C: .4byte gObjectEvents
- thumb_func_end sub_80869C0
-
- thumb_func_start sub_8086A20
-sub_8086A20: @ 8086A20
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08086A64 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086A68 @ =gObjectEvents
- adds r4, r0, r1
- adds r0, r4, 0
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- beq _08086A4A
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _08086A5C
-_08086A4A:
- bl sub_805CB70
- adds r0, r4, 0
- movs r1, 0x45
- bl ObjectEventSetHeldMovement
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
-_08086A5C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086A64: .4byte gPlayerAvatar
-_08086A68: .4byte gObjectEvents
- thumb_func_end sub_8086A20
-
- thumb_func_start sub_8086A6C
-sub_8086A6C: @ 8086A6C
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _08086AA8 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086AAC @ =gObjectEvents
- adds r0, r1
- bl ObjectEventCheckHeldMovementStatus
- lsls r0, 24
- cmp r0, 0
- beq _08086AA2
- ldr r2, _08086AB0 @ =gFieldEffectArguments
- 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]
-_08086AA2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08086AA8: .4byte gPlayerAvatar
-_08086AAC: .4byte gObjectEvents
-_08086AB0: .4byte gFieldEffectArguments
- thumb_func_end sub_8086A6C
-
- thumb_func_start sub_8086AB4
-sub_8086AB4: @ 8086AB4
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r0, 0x6
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08086B1E
- ldr r5, _08086B24 @ =gPlayerAvatar
- ldrb r0, [r5, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _08086B28 @ =gObjectEvents
- adds r4, r0
- movs r0, 0x2
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- ldrb r0, [r4, 0x18]
- lsrs r0, 4
- bl sub_80641C0
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetHeldMovement
- ldr r1, _08086B2C @ =gFieldEffectArguments
- 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]
-_08086B1E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08086B24: .4byte gPlayerAvatar
-_08086B28: .4byte gObjectEvents
-_08086B2C: .4byte gFieldEffectArguments
- thumb_func_end sub_8086AB4
-
- thumb_func_start sub_8086B30
-sub_8086B30: @ 8086B30
- push {r4,r5,lr}
- ldr r5, _08086B9C @ =gPlayerAvatar
- ldrb r1, [r5, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086BA0 @ =gObjectEvents
- adds r4, r0, r1
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _08086B96
- 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 GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetHeldMovement
- ldrb r0, [r4, 0x1A]
- movs r1, 0x1
- bl sub_80DC44C
- bl UnfreezeObjectEvents
- bl ScriptContext2_Disable
- movs r0, 0x9
- bl FieldEffectActiveListRemove
- ldr r0, _08086BA4 @ =sub_8086990
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0x16
- bl HelpSystem_SetSomeVariable2
-_08086B96:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086B9C: .4byte gPlayerAvatar
-_08086BA0: .4byte gObjectEvents
-_08086BA4: .4byte sub_8086990
- thumb_func_end sub_8086B30
-
- thumb_func_start sub_8086BA8
-sub_8086BA8: @ 8086BA8
- push {lr}
- ldr r0, _08086BC8 @ =gQuestLogState
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08086BBA
- movs r0, 0x8
- movs r1, 0x59
- bl sub_811278C
-_08086BBA:
- ldr r0, _08086BCC @ =sub_8086BD0
- movs r1, 0xFF
- bl CreateTask
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08086BC8: .4byte gQuestLogState
-_08086BCC: .4byte sub_8086BD0
- thumb_func_end sub_8086BA8
-
- thumb_func_start sub_8086BD0
-sub_8086BD0: @ 8086BD0
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08086BF8 @ =gUnknown_83CC168
- ldr r2, _08086BFC @ =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
-_08086BF8: .4byte gUnknown_83CC168
-_08086BFC: .4byte gTasks
- thumb_func_end sub_8086BD0
-
- thumb_func_start sub_8086C00
-sub_8086C00: @ 8086C00
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- bl FreezeObjectEvents
- ldr r1, _08086C20 @ =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r1, 0x6]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08086C20: .4byte gPlayerAvatar
- thumb_func_end sub_8086C00
-
- thumb_func_start sub_8086C24
-sub_8086C24: @ 8086C24
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08086C68 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086C6C @ =gObjectEvents
- adds r4, r0, r1
- adds r0, r4, 0
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- beq _08086C4E
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _08086C60
-_08086C4E:
- bl sub_805CBE8
- adds r0, r4, 0
- movs r1, 0x45
- bl ObjectEventSetHeldMovement
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
-_08086C60:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086C68: .4byte gPlayerAvatar
-_08086C6C: .4byte gObjectEvents
- thumb_func_end sub_8086C24
-
- thumb_func_start sub_8086C70
-sub_8086C70: @ 8086C70
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r5, _08086C9C @ =gPlayerAvatar
- ldrb r1, [r5, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086CA0 @ =gObjectEvents
- adds r4, r0, r1
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _08086CEE
- ldrb r1, [r5]
- movs r0, 0x6
- ands r0, r1
- cmp r0, 0
- beq _08086CA4
- movs r0, 0x1
- b _08086CAE
- .align 2, 0
-_08086C9C: .4byte gPlayerAvatar
-_08086CA0: .4byte gObjectEvents
-_08086CA4:
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08086CC0
- movs r0, 0x2
-_08086CAE:
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
- b _08086CD2
-_08086CC0:
- movs r0, 0
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
-_08086CD2:
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventForceSetSpecialAnim
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_08086CEE:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8086C70
-
- thumb_func_start sub_8086CF4
-sub_8086CF4: @ 8086CF4
- push {r4,lr}
- ldr r4, _08086D2C @ =gPlayerAvatar
- ldrb r1, [r4, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086D30 @ =gObjectEvents
- adds r0, r1
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _08086D26
- movs r0, 0
- strb r0, [r4, 0x6]
- movs r0, 0x41
- bl FieldEffectActiveListRemove
- ldr r0, _08086D34 @ =sub_8086BD0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08086D26:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08086D2C: .4byte gPlayerAvatar
-_08086D30: .4byte gObjectEvents
-_08086D34: .4byte sub_8086BD0
- thumb_func_end sub_8086CF4
-
- thumb_func_start sub_8086D38
-sub_8086D38: @ 8086D38
- push {r4,lr}
- ldr r0, _08086D84 @ =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, _08086D88 @ =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, _08086D8C @ =sub_8086D94
- str r0, [r2, 0x1C]
- ldr r0, _08086D90 @ =gFieldEffectArguments
- ldr r0, [r0]
- strh r0, [r2, 0x30]
- movs r0, 0x97
- bl PlaySE
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08086D84: .4byte gFieldEffectObjectTemplatePointers
-_08086D88: .4byte gSprites
-_08086D8C: .4byte sub_8086D94
-_08086D90: .4byte gFieldEffectArguments
- thumb_func_end sub_8086D38
-
- thumb_func_start sub_8086D94
-sub_8086D94: @ 8086D94
- 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 _08086DF6
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08086E0C @ =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]
-_08086DF6:
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0x7F
- ble _08086E06
- adds r0, r4, 0
- movs r1, 0x1E
- bl FieldEffectStop
-_08086E06:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086E0C: .4byte gSprites
- thumb_func_end sub_8086D94
-
- thumb_func_start FldEff_UseFly
-FldEff_UseFly: @ 8086E10
- push {lr}
- ldr r0, _08086E34 @ =sub_8086E40
- movs r1, 0xFE
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08086E38 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _08086E3C @ =gFieldEffectArguments
- ldr r0, [r0]
- strh r0, [r1, 0xA]
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08086E34: .4byte sub_8086E40
-_08086E38: .4byte gTasks
-_08086E3C: .4byte gFieldEffectArguments
- thumb_func_end FldEff_UseFly
-
- thumb_func_start sub_8086E40
-sub_8086E40: @ 8086E40
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08086E68 @ =gUnknown_83CC178
- ldr r2, _08086E6C @ =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
-_08086E68: .4byte gUnknown_83CC178
-_08086E6C: .4byte gTasks
- thumb_func_end sub_8086E40
-
- thumb_func_start sub_8086E70
-sub_8086E70: @ 8086E70
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, _08086EC0 @ =gPlayerAvatar
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086EC4 @ =gObjectEvents
- adds r4, r0, r1
- adds r0, r4, 0
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- beq _08086E9A
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _08086EB8
-_08086E9A:
- ldrb r0, [r6]
- strh r0, [r5, 0x26]
- movs r0, 0x1
- strb r0, [r6, 0x6]
- bl SetPlayerAvatarStateMask
- bl sub_805CB70
- adds r0, r4, 0
- movs r1, 0x45
- bl ObjectEventSetHeldMovement
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
-_08086EB8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08086EC0: .4byte gPlayerAvatar
-_08086EC4: .4byte gObjectEvents
- thumb_func_end sub_8086E70
-
- thumb_func_start sub_8086EC8
-sub_8086EC8: @ 8086EC8
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _08086F00 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086F04 @ =gObjectEvents
- adds r0, r1
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _08086EF8
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- ldr r1, _08086F08 @ =gFieldEffectArguments
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- str r0, [r1]
- movs r0, 0x3B
- bl FieldEffectStart
-_08086EF8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08086F00: .4byte gPlayerAvatar
-_08086F04: .4byte gObjectEvents
-_08086F08: .4byte gFieldEffectArguments
- thumb_func_end sub_8086EC8
-
- thumb_func_start sub_8086F0C
-sub_8086F0C: @ 8086F0C
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0x6
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _08086F54
- ldr r0, _08086F5C @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086F60 @ =gObjectEvents
- adds r5, r0, r1
- ldrh r1, [r4, 0x26]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08086F44
- ldrb r0, [r5, 0x1A]
- movs r1, 0x2
- bl sub_80DC44C
- ldrb r0, [r5, 0x1A]
- movs r1, 0
- bl sub_80DC478
-_08086F44:
- bl sub_8087168
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08086F54:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08086F5C: .4byte gPlayerAvatar
-_08086F60: .4byte gObjectEvents
- thumb_func_end sub_8086F0C
-
- thumb_func_start sub_8086F64
-sub_8086F64: @ 8086F64
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0xA]
- bl sub_80871AC
- lsls r0, 24
- cmp r0, 0
- beq _08086F98
- 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, _08086FA0 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086FA4 @ =gObjectEvents
- adds r0, r1
- movs r1, 0x2
- bl ObjectEventSetHeldMovement
-_08086F98:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08086FA0: .4byte gPlayerAvatar
-_08086FA4: .4byte gObjectEvents
- thumb_func_end sub_8086F64
-
- thumb_func_start sub_8086FA8
-sub_8086FA8: @ 8086FA8
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _08086FF4 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08086FF8 @ =gObjectEvents
- adds r2, r0, r1
- ldrh r1, [r4, 0xC]
- movs r3, 0xC
- ldrsh r0, [r4, r3]
- cmp r0, 0
- beq _08086FCE
- subs r0, r1, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _08086FEC
-_08086FCE:
- adds r0, r2, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _08086FEC
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x97
- bl PlaySE
- ldrb r0, [r4, 0xA]
- bl sub_80871C8
-_08086FEC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08086FF4: .4byte gPlayerAvatar
-_08086FF8: .4byte gObjectEvents
- thumb_func_end sub_8086FA8
-
- thumb_func_start sub_8086FFC
-sub_8086FFC: @ 8086FFC
- 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, 0x7
- ble _0808705A
- ldr r0, _08087060 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _08087064 @ =gObjectEvents
- adds r4, r0
- movs r0, 0x2
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08087068 @ =gSprites
- adds r0, r1
- 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, 0x54
- bl ObjectEventSetHeldMovement
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- strh r0, [r5, 0xC]
-_0808705A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08087060: .4byte gPlayerAvatar
-_08087064: .4byte gObjectEvents
-_08087068: .4byte gSprites
- thumb_func_end sub_8086FFC
-
- thumb_func_start sub_808706C
-sub_808706C: @ 808706C
- 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 _080870FC
- ldr r0, _08087104 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _08087108 @ =gObjectEvents
- adds r4, r0
- adds r0, r4, 0
- bl ObjectEventClearAnimIfSpecialAnimActive
- 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_8087204
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _0808710C @ =gSprites
- adds r0, r4
- ldr r1, _08087110 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- ldrb r1, [r1, 0x8]
- lsls r1, 1
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- bl StartSpriteAnim
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0
- bl sub_80877FC
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _08087114 @ =sub_8087828
- str r1, [r0]
- bl CameraObjectReset2
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
-_080870FC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08087104: .4byte gPlayerAvatar
-_08087108: .4byte gObjectEvents
-_0808710C: .4byte gSprites
-_08087110: .4byte gSaveBlock2Ptr
-_08087114: .4byte sub_8087828
- thumb_func_end sub_808706C
-
- thumb_func_start sub_8087118
-sub_8087118: @ 8087118
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0xA]
- bl sub_80871AC
- lsls r0, 24
- cmp r0, 0
- beq _08087132
- bl sub_807DC18
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08087132:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8087118
-
- thumb_func_start sub_8087138
-sub_8087138: @ 8087138
- push {lr}
- ldr r0, _08087160 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808715A
- movs r0, 0x1F
- bl FieldEffectActiveListRemove
- ldr r0, _08087164 @ =sub_8086E40
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0808715A:
- pop {r0}
- bx r0
- .align 2, 0
-_08087160: .4byte gPaletteFade
-_08087164: .4byte sub_8086E40
- thumb_func_end sub_8087138
-
- thumb_func_start sub_8087168
-sub_8087168: @ 8087168
- push {lr}
- ldr r0, _080871A0 @ =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, _080871A4 @ =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, _080871A8 @ =sub_8087220
- str r1, [r2, 0x1C]
- pop {r1}
- bx r1
- .align 2, 0
-_080871A0: .4byte gFieldEffectObjectTemplatePointers
-_080871A4: .4byte gSprites
-_080871A8: .4byte sub_8087220
- thumb_func_end sub_8087168
-
- thumb_func_start sub_80871AC
-sub_80871AC: @ 80871AC
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080871C4 @ =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
-_080871C4: .4byte gSprites
- thumb_func_end sub_80871AC
-
- thumb_func_start sub_80871C8
-sub_80871C8: @ 80871C8
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _080871FC @ =gSprites
- adds r4, r0
- ldr r0, _08087200 @ =sub_80872F0
- 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
-_080871FC: .4byte gSprites
-_08087200: .4byte sub_80872F0
- thumb_func_end sub_80871C8
-
- thumb_func_start sub_8087204
-sub_8087204: @ 8087204
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _0808721C @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- strh r1, [r2, 0x3A]
- bx lr
- .align 2, 0
-_0808721C: .4byte gSprites
- thumb_func_end sub_8087204
-
- thumb_func_start sub_8087220
-sub_8087220: @ 8087220
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080872E2
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0808727A
- ldrb r0, [r4, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldr r0, _0808725C @ =gUnknown_83CC1CC
- str r0, [r4, 0x10]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- ldr r0, _08087260 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- bne _08087264
- movs r0, 0x80
- b _08087266
- .align 2, 0
-_0808725C: .4byte gUnknown_83CC1CC
-_08087260: .4byte gSaveBlock2Ptr
-_08087264:
- movs r0, 0x76
-_08087266:
- strh r0, [r4, 0x20]
- ldr r0, _080872E8 @ =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]
-_0808727A:
- 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, _080872EC @ =0x000007ff
- cmp r1, r0
- bgt _080872B0
- adds r0, r2, 0
- adds r0, 0x60
- strh r0, [r4, 0x32]
-_080872B0:
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0x81
- ble _080872E2
- 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
-_080872E2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080872E8: .4byte 0x0000ffd0
-_080872EC: .4byte 0x000007ff
- thumb_func_end sub_8087220
-
- thumb_func_start sub_80872F0
-sub_80872F0: @ 80872F0
- 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 _0808734E
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08087360 @ =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]
-_0808734E:
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0x7F
- ble _0808735A
- movs r0, 0x1
- strh r0, [r4, 0x3C]
-_0808735A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08087360: .4byte gSprites
- thumb_func_end sub_80872F0
-
- thumb_func_start sub_8087364
-sub_8087364: @ 8087364
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0808744E
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080873C4
- ldrb r0, [r4, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldr r0, _080873A0 @ =gUnknown_83CC1CC
- str r0, [r4, 0x10]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- ldr r0, _080873A4 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- bne _080873A8
- movs r0, 0x70
- b _080873AA
- .align 2, 0
-_080873A0: .4byte gUnknown_83CC1CC
-_080873A4: .4byte gSaveBlock2Ptr
-_080873A8:
- movs r0, 0x64
-_080873AA:
- strh r0, [r4, 0x20]
- ldr r0, _08087454 @ =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]
-_080873C4:
- 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 _08087406
- ldrh r0, [r4, 0x36]
- subs r0, r1, r0
- strh r0, [r4, 0x32]
-_08087406:
- ldrh r1, [r4, 0x36]
- movs r3, 0x36
- ldrsh r0, [r4, r3]
- cmp r0, 0xFF
- bgt _08087416
- adds r0, r1, 0
- adds r0, 0x18
- strh r0, [r4, 0x36]
-_08087416:
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0xFF
- bgt _08087420
- strh r2, [r4, 0x32]
-_08087420:
- movs r2, 0x34
- ldrsh r0, [r4, r2]
- cmp r0, 0x3B
- ble _0808744E
- 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]
-_0808744E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08087454: .4byte 0x0000ffe0
- thumb_func_end sub_8087364
-
- thumb_func_start sub_8087458
-sub_8087458: @ 8087458
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_80871C8
- ldr r1, _0808747C @ =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _08087480 @ =sub_8087364
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808747C: .4byte gSprites
-_08087480: .4byte sub_8087364
- thumb_func_end sub_8087458
-
- thumb_func_start FldEff_FlyIn
-FldEff_FlyIn: @ 8087484
- push {lr}
- ldr r0, _08087494 @ =sub_8087498
- movs r1, 0xFE
- bl CreateTask
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08087494: .4byte sub_8087498
- thumb_func_end FldEff_FlyIn
-
- thumb_func_start sub_8087498
-sub_8087498: @ 8087498
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _080874C0 @ =gUnknown_83CC1D4
- ldr r2, _080874C4 @ =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
-_080874C0: .4byte gUnknown_83CC1D4
-_080874C4: .4byte gTasks
- thumb_func_end sub_8087498
-
- thumb_func_start sub_80874C8
-sub_80874C8: @ 80874C8
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r4, _080875B4 @ =gPlayerAvatar
- ldrb r1, [r4, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080875B8 @ =gObjectEvents
- adds r5, r0, r1
- adds r0, r5, 0
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- beq _080874F2
- adds r0, r5, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _080875AE
-_080874F2:
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- movs r0, 0x21
- strh r0, [r6, 0xC]
- ldrb r0, [r4]
- strh r0, [r6, 0x26]
- movs r0, 0x1
- strb r0, [r4, 0x6]
- bl SetPlayerAvatarStateMask
- ldrh r1, [r6, 0x26]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0808751A
- ldrb r0, [r5, 0x1A]
- movs r1, 0
- bl sub_80DC44C
-_0808751A:
- movs r0, 0x2
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl ObjectEventSetGraphicsId
- bl CameraObjectReset2
- adds r0, r5, 0
- movs r1, 0x3
- bl ObjectEventTurn
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _080875BC @ =gSprites
- adds r0, r4
- movs r1, 0x16
- bl StartSpriteAnim
- ldrb r1, [r5, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- strb r0, [r5, 0x1]
- bl sub_8087168
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0xA]
- bl sub_80871C8
- ldrb r0, [r6, 0xA]
- ldrb r1, [r5, 0x4]
- bl sub_8087204
- movs r0, 0xA
- ldrsh r1, [r6, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _080875C0 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- ldrb r1, [r1, 0x8]
- lsls r1, 25
- movs r2, 0x80
- lsls r2, 18
- adds r1, r2
- lsrs r1, 24
- bl StartSpriteAnim
- movs r0, 0xA
- ldrsh r1, [r6, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x1
- bl sub_80877FC
- movs r2, 0xA
- ldrsh r1, [r6, r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _080875C4 @ =sub_8087828
- str r1, [r0]
-_080875AE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080875B4: .4byte gPlayerAvatar
-_080875B8: .4byte gObjectEvents
-_080875BC: .4byte gSprites
-_080875C0: .4byte gSaveBlock2Ptr
-_080875C4: .4byte sub_8087828
- thumb_func_end sub_80874C8
-
- thumb_func_start sub_80875C8
-sub_80875C8: @ 80875C8
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r6, _08087638 @ =gSprites
- adds r0, r6
- bl sub_80878C0
- ldrh r1, [r5, 0xC]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _080875F2
- subs r0, r1, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _08087630
-_080875F2:
- ldr r0, _0808763C @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08087640 @ =gObjectEvents
- adds r0, r1
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r4, r6
- ldrb r0, [r5, 0xA]
- movs r1, 0x40
- bl sub_8087204
- 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]
-_08087630:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08087638: .4byte gSprites
-_0808763C: .4byte gPlayerAvatar
-_08087640: .4byte gObjectEvents
- thumb_func_end sub_80875C8
-
- thumb_func_start sub_8087644
-sub_8087644: @ 8087644
- push {r4,lr}
- sub sp, 0x24
- adds r4, r0, 0
- ldr r1, _0808768C @ =gUnknown_83CC1F0
- mov r0, sp
- movs r2, 0x24
- bl memcpy
- ldr r0, _08087690 @ =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08087694 @ =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 _08087682
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08087682:
- add sp, 0x24
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808768C: .4byte gUnknown_83CC1F0
-_08087690: .4byte gPlayerAvatar
-_08087694: .4byte gSprites
- thumb_func_end sub_8087644
-
- thumb_func_start sub_8087698
-sub_8087698: @ 8087698
- push {r4-r6,lr}
- adds r6, r0, 0
- ldrb r0, [r6, 0xA]
- bl sub_80871AC
- lsls r0, 24
- cmp r0, 0
- beq _080876FC
- ldr r0, _08087704 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r5, r0, 3
- adds r5, r0
- lsls r5, 2
- ldr r0, _08087708 @ =gObjectEvents
- adds r5, r0
- ldrb r0, [r5, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0808770C @ =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_805F724
- 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_805CB70
- adds r0, r5, 0
- movs r1, 0x45
- bl ObjectEventSetHeldMovement
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_080876FC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08087704: .4byte gPlayerAvatar
-_08087708: .4byte gObjectEvents
-_0808770C: .4byte gSprites
- thumb_func_end sub_8087698
-
- thumb_func_start sub_8087710
-sub_8087710: @ 8087710
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _08087740 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08087744 @ =gObjectEvents
- adds r0, r1
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _08087738
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- ldrb r0, [r4, 0xA]
- bl sub_8087458
-_08087738:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08087740: .4byte gPlayerAvatar
-_08087744: .4byte gObjectEvents
- thumb_func_end sub_8087710
-
- thumb_func_start sub_8087748
-sub_8087748: @ 8087748
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0xA]
- bl sub_80871AC
- lsls r0, 24
- cmp r0, 0
- beq _08087774
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0808777C @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x10
- strh r0, [r4, 0xA]
-_08087774:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808777C: .4byte gSprites
- thumb_func_end sub_8087748
-
- thumb_func_start fishE
-fishE: @ 8087780
- 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 _080877EA
- ldr r6, _080877F0 @ =gPlayerAvatar
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080877F4 @ =gObjectEvents
- adds r4, r0, r1
- movs r7, 0
- ldrh r1, [r5, 0x26]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080877B4
- movs r7, 0x2
- ldrb r0, [r4, 0x1A]
- movs r1, 0x1
- bl sub_80DC44C
-_080877B4:
- adds r0, r7, 0
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
- adds r0, r4, 0
- movs r1, 0x1
- bl ObjectEventTurn
- ldrh r0, [r5, 0x26]
- strb r0, [r6]
- movs r0, 0
- strb r0, [r6, 0x6]
- movs r0, 0x20
- bl FieldEffectActiveListRemove
- ldr r0, _080877F8 @ =sub_8087498
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080877EA:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080877F0: .4byte gPlayerAvatar
-_080877F4: .4byte gObjectEvents
-_080877F8: .4byte sub_8087498
- thumb_func_end fishE
-
- thumb_func_start sub_80877FC
-sub_80877FC: @ 80877FC
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r5, r1, 24
- lsrs r5, 24
- ldrb r0, [r4, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldr r0, _08087824 @ =gUnknown_83CC23C
- str r0, [r4, 0x10]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- adds r1, r5, 0
- bl StartSpriteAffineAnim
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08087824: .4byte gUnknown_83CC23C
- thumb_func_end sub_80877FC
-
- thumb_func_start sub_8087828
-sub_8087828: @ 8087828
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- movs r1, 0xB4
- 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, 0x2
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x32]
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- cmp r0, 0x40
- beq _08087886
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _080878BC @ =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]
-_08087886:
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0x7F
- ble _080878B4
- movs r0, 0x1
- strh r0, [r4, 0x3C]
- ldrb r1, [r4, 0x1]
- subs r0, 0x5
- 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
-_080878B4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080878BC: .4byte gSprites
- thumb_func_end sub_8087828
-
- thumb_func_start sub_80878C0
-sub_80878C0: @ 80878C0
- push {r4-r6,lr}
- adds r4, r0, 0
- ldrb r5, [r4, 0x1]
- lsls r0, r5, 30
- cmp r0, 0
- beq _08087916
- ldr r1, _0808791C @ =gOamMatrices
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r3, r0, 27
- lsls r0, r3, 3
- adds r1, r0, r1
- movs r2, 0
- ldrsh r0, [r1, r2]
- movs r2, 0x80
- lsls r2, 1
- cmp r0, r2
- beq _080878EC
- movs r6, 0x6
- ldrsh r0, [r1, r6]
- cmp r0, r2
- bne _08087916
-_080878EC:
- movs r0, 0x4
- negs r0, r0
- ands r0, r5
- strb r0, [r4, 0x1]
- adds r0, r3, 0
- 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
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnim
- ldr r0, _08087920 @ =sub_80872F0
- str r0, [r4, 0x1C]
-_08087916:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0808791C: .4byte gOamMatrices
-_08087920: .4byte sub_80872F0
- thumb_func_end sub_80878C0
-
- thumb_func_start sub_8087924
-sub_8087924: @ 8087924
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r7, _080879C4 @ =gFieldEffectArguments
- ldrb r0, [r7]
- ldrb r1, [r7, 0x4]
- ldrb r2, [r7, 0x8]
- mov r3, sp
- bl TryGetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _080879BA
- mov r0, sp
- ldrb r0, [r0]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _080879C8 @ =gObjectEvents
- adds r4, r0
- movs r0, 0x10
- ldrsh r5, [r4, r0]
- subs r5, 0x7
- movs r0, 0x12
- ldrsh r6, [r4, r0]
- subs r6, 0x7
- ldr r1, [r7, 0xC]
- subs r5, r1, r5
- lsls r5, 4
- ldr r2, [r7, 0x10]
- subs r6, r2, r6
- lsls r6, 4
- adds r1, 0x7
- lsls r1, 16
- asrs r1, 16
- adds r2, 0x7
- lsls r2, 16
- asrs r2, 16
- adds r0, r4, 0
- bl npc_coords_shift
- ldr r0, _080879CC @ =sub_80879D8
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080879D0 @ =gTasks
- lsls r2, r0, 2
- adds r2, r0
- lsls r2, 3
- adds r2, r1
- ldrb r0, [r4, 0x4]
- strh r0, [r2, 0xA]
- ldr r3, _080879D4 @ =gSprites
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x20]
- adds r0, r5
- strh r0, [r2, 0xC]
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x22]
- adds r0, r6
- strh r0, [r2, 0xE]
- ldr r0, [r7, 0x14]
- strh r0, [r2, 0x18]
- mov r0, sp
- ldrb r0, [r0]
- strh r0, [r2, 0x1A]
-_080879BA:
- movs r0, 0
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080879C4: .4byte gFieldEffectArguments
-_080879C8: .4byte gObjectEvents
-_080879CC: .4byte sub_80879D8
-_080879D0: .4byte gTasks
-_080879D4: .4byte gSprites
- thumb_func_end sub_8087924
-
- thumb_func_start sub_80879D8
-sub_80879D8: @ 80879D8
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- ldr r1, _08087A04 @ =gTasks+0x8
- adds r5, r0, r1
- movs r0, 0x2
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08087A08 @ =gSprites
- adds r6, r0, r1
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08087A0C
- cmp r0, 0x1
- beq _08087A4A
- b _08087AA8
- .align 2, 0
-_08087A04: .4byte gTasks+0x8
-_08087A08: .4byte gSprites
-_08087A0C:
- ldrh r0, [r6, 0x20]
- lsls r0, 4
- strh r0, [r5, 0x8]
- ldrh r0, [r6, 0x22]
- lsls r0, 4
- strh r0, [r5, 0xA]
- movs r2, 0x4
- ldrsh r0, [r5, r2]
- lsls r0, 4
- movs r2, 0x8
- ldrsh r1, [r5, r2]
- subs r0, r1
- movs r2, 0x10
- ldrsh r1, [r5, r2]
- bl __divsi3
- strh r0, [r5, 0xC]
- movs r1, 0x6
- ldrsh r0, [r5, r1]
- lsls r0, 4
- movs r2, 0xA
- ldrsh r1, [r5, r2]
- subs r0, r1
- movs r2, 0x10
- ldrsh r1, [r5, r2]
- bl __divsi3
- strh r0, [r5, 0xE]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_08087A4A:
- ldrh r1, [r5, 0x10]
- movs r2, 0x10
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _08087A78
- subs r0, r1, 0x1
- strh r0, [r5, 0x10]
- ldrh r1, [r5, 0xC]
- ldrh r0, [r5, 0x8]
- adds r1, r0
- strh r1, [r5, 0x8]
- ldrh r0, [r5, 0xE]
- ldrh r2, [r5, 0xA]
- adds r0, r2
- strh r0, [r5, 0xA]
- lsls r1, 16
- asrs r1, 20
- strh r1, [r6, 0x20]
- ldrh r0, [r5, 0xA]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r6, 0x22]
- b _08087AA8
-_08087A78:
- movs r1, 0x12
- ldrsh r0, [r5, r1]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _08087AB0 @ =gObjectEvents
- adds r4, r0
- ldrh r0, [r5, 0x4]
- strh r0, [r6, 0x20]
- ldrh r0, [r5, 0x6]
- strh r0, [r6, 0x22]
- adds r0, r4, 0
- bl npc_coords_shift_still
- ldrb r0, [r4]
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x43
- bl FieldEffectActiveListRemove
- adds r0, r7, 0
- bl DestroyTask
-_08087AA8:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08087AB0: .4byte gObjectEvents
- thumb_func_end sub_80879D8
-
- thumb_func_start sub_8087AB4
-sub_8087AB4: @ 8087AB4
- push {r4,lr}
- sub sp, 0x4
- ldr r4, _08087AF8 @ =gFieldEffectArguments
- ldrb r0, [r4]
- ldrb r1, [r4, 0x4]
- ldrb r2, [r4, 0x8]
- mov r3, sp
- bl TryGetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _08087B04
- ldr r0, _08087AFC @ =sub_8087BC0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08087B00 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- mov r0, sp
- ldrb r0, [r0]
- strh r0, [r1, 0xC]
- ldr r0, [r4]
- strh r0, [r1, 0x14]
- ldr r0, [r4, 0x4]
- strh r0, [r1, 0x16]
- ldr r0, [r4, 0x8]
- strh r0, [r1, 0x18]
- b _08087B0A
- .align 2, 0
-_08087AF8: .4byte gFieldEffectArguments
-_08087AFC: .4byte sub_8087BC0
-_08087B00: .4byte gTasks
-_08087B04:
- movs r0, 0x44
- bl FieldEffectActiveListRemove
-_08087B0A:
- movs r0, 0
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8087AB4
-
- thumb_func_start sub_8087B14
-sub_8087B14: @ 8087B14
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _08087B4C @ =gTasks+0x8
- adds r4, r0, r1
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _08087B50
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _08087B54
- movs r0, 0
- strh r0, [r4, 0xC]
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08087B54
- subs r0, r1, 0x1
- b _08087B52
- .align 2, 0
-_08087B4C: .4byte gTasks+0x8
-_08087B50:
- movs r0, 0x4
-_08087B52:
- strh r0, [r4, 0xA]
-_08087B54:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _08087B8E
- movs r0, 0
- strh r0, [r4]
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08087B84
- ldrh r1, [r4, 0xA]
- negs r1, r1
- lsls r1, 16
- asrs r1, 16
- movs r0, 0
- bl SetCameraPanning
- b _08087B8E
-_08087B84:
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0
- bl SetCameraPanning
-_08087B8E:
- bl UpdateCameraPanning
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08087BA0
- adds r0, r5, 0
- bl DestroyTask
-_08087BA0:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8087B14
-
- thumb_func_start sub_8087BA8
-sub_8087BA8: @ 8087BA8
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08087BBC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0x1
- strh r0, [r1, 0x16]
- bx lr
- .align 2, 0
-_08087BBC: .4byte gTasks
- thumb_func_end sub_8087BA8
-
- thumb_func_start sub_8087BC0
-sub_8087BC0: @ 8087BC0
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, _08087BF8 @ =gTasks+0x8
- adds r4, r0
- bl InstallCameraPanAheadCallback
- movs r0, 0
- bl SetCameraPanningCallback
- ldr r1, _08087BFC @ =gUnknown_83CC244
- movs r2, 0x2
- ldrsh r0, [r4, r2]
- lsls r0, 2
- adds r0, r1
- ldr r2, [r0]
- adds r0, r4, 0
- adds r1, r5, 0
- bl _call_via_r2
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08087BF8: .4byte gTasks+0x8
-_08087BFC: .4byte gUnknown_83CC244
- thumb_func_end sub_8087BC0
-
- thumb_func_start sub_8087C00
-sub_8087C00: @ 8087C00
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _08087C28 @ =sub_8087B14
- movs r1, 0x5A
- bl CreateTask
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x51
- bl PlaySE
- strh r4, [r5, 0xA]
- ldrh r0, [r5, 0x2]
- adds r0, 0x1
- strh r0, [r5, 0x2]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08087C28: .4byte sub_8087B14
- thumb_func_end sub_8087C00
-
- thumb_func_start sub_8087C2C
-sub_8087C2C: @ 8087C2C
- push {r4-r7,lr}
- sub sp, 0x4
- adds r7, r0, 0
- ldrh r0, [r7, 0x6]
- adds r0, 0x1
- strh r0, [r7, 0x6]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x78
- ble _08087C9A
- ldr r2, _08087CA4 @ =gObjectEvents
- movs r1, 0x4
- ldrsh r0, [r7, r1]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08087CA8 @ =gSprites
- adds r4, r0
- ldrb r0, [r1, 0x1]
- movs r2, 0x20
- orrs r0, r2
- strb r0, [r1, 0x1]
- ldr r6, _08087CAC @ =0x0000ffff
- ldr r5, _08087CB0 @ =0x00007fff
- adds r0, r6, 0
- movs r1, 0x10
- adds r2, r5, 0
- bl BlendPalettes
- str r5, [sp]
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- adds r0, r4, 0
- bl sub_8087CFC
- movs r0, 0x50
- bl PlaySE
- ldrb r0, [r7, 0xA]
- bl sub_8087BA8
- movs r0, 0
- strh r0, [r7, 0x6]
- ldrh r0, [r7, 0x2]
- adds r0, 0x1
- strh r0, [r7, 0x2]
-_08087C9A:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08087CA4: .4byte gObjectEvents
-_08087CA8: .4byte gSprites
-_08087CAC: .4byte 0x0000ffff
-_08087CB0: .4byte 0x00007fff
- thumb_func_end sub_8087C2C
-
- thumb_func_start sub_8087CB4
-sub_8087CB4: @ 8087CB4
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, _08087CF4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08087CEE
- ldr r0, _08087CF8 @ =sub_8087B14
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _08087CEE
- bl InstallCameraPanAheadCallback
- ldrb r0, [r4, 0xC]
- ldrb r1, [r4, 0xE]
- ldrb r2, [r4, 0x10]
- bl RemoveObjectEventByLocalIdAndMap
- movs r0, 0x44
- bl FieldEffectActiveListRemove
- adds r0, r5, 0
- bl DestroyTask
-_08087CEE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08087CF4: .4byte gPaletteFade
-_08087CF8: .4byte sub_8087B14
- thumb_func_end sub_8087CB4
-
- thumb_func_start sub_8087CFC
-sub_8087CFC: @ 8087CFC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- ldr r0, _08087D80 @ =gUnknown_300506C
- movs r1, 0
- ldrsh r2, [r0, r1]
- movs r3, 0x20
- ldrsh r0, [r6, r3]
- adds r2, r0
- movs r1, 0x24
- ldrsh r0, [r6, r1]
- adds r2, r0
- ldr r0, _08087D84 @ =gUnknown_3005068
- movs r3, 0
- ldrsh r0, [r0, r3]
- movs r3, 0x22
- ldrsh r1, [r6, r3]
- adds r0, r1
- movs r3, 0x26
- ldrsh r1, [r6, r3]
- adds r0, r1
- subs r0, 0x4
- movs r5, 0
- lsls r2, 16
- mov r8, r2
- lsls r7, r0, 16
-_08087D32:
- ldr r0, _08087D88 @ =gUnknown_83CC2A0
- mov r2, r8
- asrs r1, r2, 16
- asrs r2, r7, 16
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _08087D6E
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08087D8C @ =gSprites
- adds r4, r0
- lsls r1, r5, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- strh r5, [r4, 0x2E]
- ldrb r1, [r6, 0x5]
- lsrs r1, 4
- lsls r1, 4
- ldrb r2, [r4, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
-_08087D6E:
- adds r5, 0x1
- cmp r5, 0x3
- ble _08087D32
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08087D80: .4byte gUnknown_300506C
-_08087D84: .4byte gUnknown_3005068
-_08087D88: .4byte gUnknown_83CC2A0
-_08087D8C: .4byte gSprites
- thumb_func_end sub_8087CFC
-
- thumb_func_start sub_8087D90
-sub_8087D90: @ 8087D90
- push {lr}
- adds r1, r0, 0
- movs r2, 0x2E
- ldrsh r0, [r1, r2]
- cmp r0, 0x1
- beq _08087DBC
- cmp r0, 0x1
- bgt _08087DA6
- cmp r0, 0
- beq _08087DB0
- b _08087DDA
-_08087DA6:
- cmp r0, 0x2
- beq _08087DC8
- cmp r0, 0x3
- beq _08087DCE
- b _08087DDA
-_08087DB0:
- ldrh r0, [r1, 0x20]
- subs r0, 0x10
- strh r0, [r1, 0x20]
- ldrh r0, [r1, 0x22]
- subs r0, 0xC
- b _08087DD8
-_08087DBC:
- ldrh r0, [r1, 0x20]
- adds r0, 0x10
- strh r0, [r1, 0x20]
- ldrh r0, [r1, 0x22]
- subs r0, 0xC
- b _08087DD8
-_08087DC8:
- ldrh r0, [r1, 0x20]
- subs r0, 0x10
- b _08087DD2
-_08087DCE:
- ldrh r0, [r1, 0x20]
- adds r0, 0x10
-_08087DD2:
- strh r0, [r1, 0x20]
- ldrh r0, [r1, 0x22]
- adds r0, 0xC
-_08087DD8:
- strh r0, [r1, 0x22]
-_08087DDA:
- ldrh r0, [r1, 0x20]
- adds r0, 0x4
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xF8
- bhi _08087DF6
- movs r0, 0x22
- ldrsh r2, [r1, r0]
- movs r0, 0x4
- negs r0, r0
- cmp r2, r0
- blt _08087DF6
- cmp r2, 0xA4
- ble _08087DFC
-_08087DF6:
- adds r0, r1, 0
- bl DestroySprite
-_08087DFC:
- pop {r0}
- bx r0
- thumb_func_end sub_8087D90
-
- thumb_func_start sub_8087E00
-sub_8087E00: @ 8087E00
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08087E24 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08087E1E
- movs r0, 0x45
- bl FieldEffectActiveListRemove
- adds r0, r4, 0
- bl DestroyTask
-_08087E1E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08087E24: .4byte gPaletteFade
- thumb_func_end sub_8087E00
-
- thumb_func_start sub_8087E28
-sub_8087E28: @ 8087E28
- push {r4,r5,lr}
- sub sp, 0x4
- movs r4, 0x1
- negs r4, r4
- ldr r5, _08087E5C @ =0x00007fff
- adds r0, r4, 0
- movs r1, 0x10
- adds r2, r5, 0
- bl BlendPalettes
- str r5, [sp]
- adds r0, r4, 0
- adds r1, r4, 0
- movs r2, 0xF
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _08087E60 @ =sub_8087E00
- movs r1, 0x5A
- bl CreateTask
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08087E5C: .4byte 0x00007fff
-_08087E60: .4byte sub_8087E00
- thumb_func_end sub_8087E28
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s
index db64b77db..564cc519f 100644
--- a/asm/field_effect_helpers.s
+++ b/asm/field_effect_helpers.s
@@ -1369,8 +1369,8 @@ _080DB800: .4byte gFieldEffectObjectTemplatePointers
_080DB804: .4byte gSprites
thumb_func_end FldEff_JumpLongGrass
- thumb_func_start sub_80DB808
-sub_80DB808: @ 80DB808
+ thumb_func_start FldEff_ShortGrass
+FldEff_ShortGrass: @ 80DB808
push {r4-r6,lr}
ldr r6, _080DB89C @ =gFieldEffectArguments
ldrb r0, [r6]
@@ -1449,7 +1449,7 @@ _080DB89C: .4byte gFieldEffectArguments
_080DB8A0: .4byte gObjectEvents
_080DB8A4: .4byte gFieldEffectObjectTemplatePointers
_080DB8A8: .4byte gSprites
- thumb_func_end sub_80DB808
+ thumb_func_end FldEff_ShortGrass
thumb_func_start sub_80DB8AC
sub_80DB8AC: @ 80DB8AC
@@ -2310,8 +2310,8 @@ _080DBF48: .4byte gFieldEffectArguments
_080DBF4C: .4byte gSprites
thumb_func_end oei_ripples
- thumb_func_start sub_80DBF50
-sub_80DBF50: @ 80DBF50
+ thumb_func_start FldEff_HotSpringsWater
+FldEff_HotSpringsWater: @ 80DBF50
push {r4-r6,lr}
ldr r6, _080DBFE4 @ =gFieldEffectArguments
ldrb r0, [r6]
@@ -2390,7 +2390,7 @@ _080DBFE4: .4byte gFieldEffectArguments
_080DBFE8: .4byte gObjectEvents
_080DBFEC: .4byte gFieldEffectObjectTemplatePointers
_080DBFF0: .4byte gSprites
- thumb_func_end sub_80DBF50
+ thumb_func_end FldEff_HotSpringsWater
thumb_func_start sub_80DBFF4
sub_80DBFF4: @ 80DBFF4
@@ -2720,8 +2720,8 @@ StartAshFieldEffect: @ 80DC23C
_080DC26C: .4byte gFieldEffectArguments
thumb_func_end StartAshFieldEffect
- thumb_func_start oei_ash
-oei_ash: @ 80DC270
+ thumb_func_start FldEff_Ash
+FldEff_Ash: @ 80DC270
push {r4,r5,lr}
sub sp, 0x4
ldr r5, _080DC2F0 @ =gFieldEffectArguments
@@ -2789,7 +2789,7 @@ _080DC2E6:
_080DC2F0: .4byte gFieldEffectArguments
_080DC2F4: .4byte gFieldEffectObjectTemplatePointers
_080DC2F8: .4byte gSprites
- thumb_func_end oei_ash
+ thumb_func_end FldEff_Ash
thumb_func_start sub_80DC2FC
sub_80DC2FC: @ 80DC2FC
@@ -2906,8 +2906,8 @@ _080DC3C8:
bx r0
thumb_func_end sub_80DC3A8
- thumb_func_start sub_80DC3D0
-sub_80DC3D0: @ 80DC3D0
+ thumb_func_start FldEff_SurfBlob
+FldEff_SurfBlob: @ 80DC3D0
push {r4,r5,lr}
ldr r4, _080DC43C @ =gFieldEffectArguments
adds r1, r4, 0x4
@@ -2964,7 +2964,7 @@ _080DC43C: .4byte gFieldEffectArguments
_080DC440: .4byte gFieldEffectObjectTemplatePointers
_080DC444: .4byte gSprites
_080DC448: .4byte 0x0000ffff
- thumb_func_end sub_80DC3D0
+ thumb_func_end FldEff_SurfBlob
thumb_func_start sub_80DC44C
sub_80DC44C: @ 80DC44C
@@ -3723,11 +3723,11 @@ _080DC9D0:
_080DC9D8: .4byte 0x00001004
thumb_func_end sub_80DC99C
- thumb_func_start sub_80DC9DC
-sub_80DC9DC: @ 80DC9DC
+ thumb_func_start FldEff_BerryTreeGrowthSparkle
+FldEff_BerryTreeGrowthSparkle: @ 80DC9DC
movs r0, 0
bx lr
- thumb_func_end sub_80DC9DC
+ thumb_func_end FldEff_BerryTreeGrowthSparkle
thumb_func_start ShowTreeDisguiseFieldEffect
ShowTreeDisguiseFieldEffect: @ 80DC9E0
diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s
index 6e425d2c7..ccf946752 100644
--- a/asm/field_player_avatar.s
+++ b/asm/field_player_avatar.s
@@ -5337,7 +5337,7 @@ _0805DBBA:
strh r0, [r7, 0x22]
movs r2, 0x22
ldrsh r1, [r7, r2]
- ldr r0, _0805DBF0 @ =gUnknown_3005068
+ ldr r0, _0805DBF0 @ =gTotalCameraPixelOffsetY
movs r2, 0
ldrsh r0, [r0, r2]
adds r1, r0
@@ -5350,7 +5350,7 @@ _0805DBBA:
strh r0, [r5]
b _0805DBFA
.align 2, 0
-_0805DBF0: .4byte gUnknown_3005068
+_0805DBF0: .4byte gTotalCameraPixelOffsetY
_0805DBF4:
adds r0, r2, 0
bl DestroyTask
diff --git a/asm/field_weather.s b/asm/field_weather.s
index 7960543a6..2c7ef2128 100644
--- a/asm/field_weather.s
+++ b/asm/field_weather.s
@@ -2698,8 +2698,8 @@ _0807B07C: .4byte gUnknown_2037F34
_0807B080: .4byte 0x000006c6
thumb_func_end sub_807B070
- thumb_func_start sub_807B084
-sub_807B084: @ 807B084
+ thumb_func_start PreservePaletteInWeather
+PreservePaletteInWeather: @ 807B084
push {r4,r5,lr}
adds r4, r0, 0
lsls r4, 24
@@ -2721,10 +2721,10 @@ sub_807B084: @ 807B084
_0807B0A8: .4byte gUnknown_83C2CC0
_0807B0AC: .4byte gUnknown_2038684
_0807B0B0: .4byte gUnknown_20386A4
- thumb_func_end sub_807B084
+ thumb_func_end PreservePaletteInWeather
- thumb_func_start sub_807B0B4
-sub_807B0B4: @ 807B0B4
+ thumb_func_start ResetPreservedPalettesInWeather
+ResetPreservedPalettesInWeather: @ 807B0B4
ldr r1, _0807B0BC @ =gUnknown_20386A4
ldr r0, _0807B0C0 @ =gUnknown_83C2CC0
str r0, [r1]
@@ -2732,7 +2732,7 @@ sub_807B0B4: @ 807B0B4
.align 2, 0
_0807B0BC: .4byte gUnknown_20386A4
_0807B0C0: .4byte gUnknown_83C2CC0
- thumb_func_end sub_807B0B4
+ thumb_func_end ResetPreservedPalettesInWeather
thumb_func_start sub_807B0C4
sub_807B0C4: @ 807B0C4
diff --git a/asm/overworld.s b/asm/overworld.s
index e0fa1ffdd..2e469cec2 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -115,8 +115,8 @@ _08054C8A:
_08054C9C: .4byte sWhiteOutMoneyLossBadgeFlagIDs
thumb_func_end CountBadgesForOverworldWhiteOutLossCalculation
- thumb_func_start sub_8054CA0
-sub_8054CA0: @ 8054CA0
+ thumb_func_start Overworld_ResetStateAfterFly
+Overworld_ResetStateAfterFly: @ 8054CA0
push {lr}
bl ResetInitialPlayerAvatarState
movs r0, 0x83
@@ -152,7 +152,7 @@ _08054CF8: .4byte 0x00000805
_08054CFC: .4byte 0x00000806
_08054D00: .4byte 0x00000808
_08054D04: .4byte 0x0000404d
- thumb_func_end sub_8054CA0
+ thumb_func_end Overworld_ResetStateAfterFly
thumb_func_start Overworld_ResetStateAfterTeleport
Overworld_ResetStateAfterTeleport: @ 8054D08
@@ -1242,12 +1242,12 @@ sub_805550C: @ 805550C
lsls r0, 24
lsrs r5, r0, 24
adds r0, r4, 0
- bl is_light_level_1_2_3_5_or_6
+ bl IsMapTypeOutdoors
lsls r0, 24
cmp r0, 0
beq _08055590
adds r0, r5, 0
- bl is_light_level_1_2_3_5_or_6
+ bl IsMapTypeOutdoors
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -1764,7 +1764,7 @@ sub_8055920: @ 8055920
bl sub_8054F68
ldr r0, _0805599C @ =gMapHeader
ldrb r0, [r0, 0x17]
- bl is_light_level_1_2_3_5_or_6
+ bl IsMapTypeOutdoors
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -1815,7 +1815,7 @@ sub_80559A8: @ 80559A8
bl sub_8054F68
ldr r0, _080559E0 @ =gMapHeader
ldrb r0, [r0, 0x17]
- bl is_light_level_1_2_3_5_or_6
+ bl IsMapTypeOutdoors
bl TrySetMapSaveWarpStatus
bl SetSav1WeatherFromCurrMapHeader
bl sub_805610C
@@ -2611,8 +2611,8 @@ _08055F82:
bx r1
thumb_func_end GetMapMusicFadeoutSpeed
- thumb_func_start sub_8055F88
-sub_8055F88: @ 8055F88
+ thumb_func_start TryFadeOutOldMapMusic
+TryFadeOutOldMapMusic: @ 8055F88
push {r4,lr}
bl sub_8055DA4
lsls r0, 16
@@ -2638,7 +2638,7 @@ _08055FB8:
bx r0
.align 2, 0
_08055FC0: .4byte 0x00004001
- thumb_func_end sub_8055F88
+ thumb_func_end TryFadeOutOldMapMusic
thumb_func_start BGMusicStopped
BGMusicStopped: @ 8055FC4
@@ -2933,8 +2933,8 @@ sub_80561B4: @ 80561B4
_080561D4: .4byte gUnknown_2031DB4
thumb_func_end sub_80561B4
- thumb_func_start is_light_level_1_2_3_5_or_6
-is_light_level_1_2_3_5_or_6: @ 80561D8
+ thumb_func_start IsMapTypeOutdoors
+IsMapTypeOutdoors: @ 80561D8
push {lr}
lsls r0, 24
lsrs r0, 24
@@ -2956,7 +2956,7 @@ _080561F6:
_080561F8:
pop {r1}
bx r1
- thumb_func_end is_light_level_1_2_3_5_or_6
+ thumb_func_end IsMapTypeOutdoors
thumb_func_start Overworld_MapTypeAllowsTeleportAndFly
Overworld_MapTypeAllowsTeleportAndFly: @ 80561FC
@@ -4659,10 +4659,10 @@ _0805706A:
thumb_func_start sub_8057074
sub_8057074: @ 8057074
push {lr}
- ldr r0, _08057094 @ =gUnknown_300506C
+ ldr r0, _08057094 @ =gTotalCameraPixelOffsetX
movs r1, 0
strh r1, [r0]
- ldr r0, _08057098 @ =gUnknown_3005068
+ ldr r0, _08057098 @ =gTotalCameraPixelOffsetY
strh r1, [r0]
bl sub_805DE74
movs r0, 0
@@ -4672,18 +4672,18 @@ sub_8057074: @ 8057074
pop {r0}
bx r0
.align 2, 0
-_08057094: .4byte gUnknown_300506C
-_08057098: .4byte gUnknown_3005068
+_08057094: .4byte gTotalCameraPixelOffsetX
+_08057098: .4byte gTotalCameraPixelOffsetY
thumb_func_end sub_8057074
thumb_func_start mli4_mapscripts_and_other
mli4_mapscripts_and_other: @ 805709C
push {r4,r5,lr}
sub sp, 0x4
- ldr r0, _080570F4 @ =gUnknown_300506C
+ ldr r0, _080570F4 @ =gTotalCameraPixelOffsetX
movs r1, 0
strh r1, [r0]
- ldr r0, _080570F8 @ =gUnknown_3005068
+ ldr r0, _080570F8 @ =gTotalCameraPixelOffsetY
strh r1, [r0]
bl sub_805DE74
mov r4, sp
@@ -4715,8 +4715,8 @@ mli4_mapscripts_and_other: @ 805709C
pop {r0}
bx r0
.align 2, 0
-_080570F4: .4byte gUnknown_300506C
-_080570F8: .4byte gUnknown_3005068
+_080570F4: .4byte gTotalCameraPixelOffsetX
+_080570F8: .4byte gTotalCameraPixelOffsetY
_080570FC: .4byte gSaveBlock2Ptr
thumb_func_end mli4_mapscripts_and_other
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
index 115c9567b..79966093f 100644
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -1801,7 +1801,7 @@ mapldr_0808C6D8: @ 808C6D8
bl _call_via_r4
adds r0, r5, 0
bl SetVBlankCallback
- bl sub_807DC00
+ bl FadeInFromBlack
pop {r4,r5}
pop {r0}
bx r0
diff --git a/data/event_object_movement.s b/data/event_object_movement.s
index 17adf3ef4..5920835c4 100644
--- a/data/event_object_movement.s
+++ b/data/event_object_movement.s
@@ -7028,7 +7028,7 @@ gUnknown_83A5EBC:: @ 83A5EBC
.4byte gUnknown_83A5EA4
gUnknown_83A5EC0:: @ 83A5EC0
- spr_template 0xFFFF, 0x100D, gObjectEventBaseOam_16x16, gUnknown_83A5EBC, gUnknown_83A5E7C, gDummySpriteAffineAnimTable, sub_8085604
+ spr_template 0xFFFF, 0x100D, gObjectEventBaseOam_16x16, gUnknown_83A5EBC, gUnknown_83A5E7C, gDummySpriteAffineAnimTable, SpriteCB_PopOutOfAsh
gUnknown_83A5ED8:: @ 83A5ED8
obj_pal gUnknown_839C588, 0x100D
@@ -7052,7 +7052,7 @@ gUnknown_83A5F20:: @ 83A5F20
.4byte gUnknown_83A5F08
gUnknown_83A5F24:: @ 83A5F24
- spr_template 0xFFFF, 0x100D, gObjectEventBaseOam_16x16, gUnknown_83A5F20, gUnknown_83A5EE0, gDummySpriteAffineAnimTable, sub_80853B0
+ spr_template 0xFFFF, 0x100D, gObjectEventBaseOam_16x16, gUnknown_83A5F20, gUnknown_83A5EE0, gDummySpriteAffineAnimTable, SpriteCB_LavaridgeGymWarp
gUnknown_83A5F3C:: @ 83A5F3C
overworld_frame gUnknown_839CAA8, 2, 4, 0
diff --git a/data/field_effect.s b/data/field_effect.s
deleted file mode 100644
index 7e797c560..000000000
--- a/data/field_effect.s
+++ /dev/null
@@ -1,432 +0,0 @@
-#include "constants/maps.h"
-#include "constants/species.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnknown_83CA770:: @ 3CA770 4bpp
- .incbin "graphics/field_effects/unk_83CA770.4bpp"
-
-gUnknown_83CAF70:: @ 83CAF70 gbapal
- .incbin "graphics/field_effects/unk_83CAF70.gbapal"
-
-gUnknown_83CAF90:: @ 83CAF90 4bpp
- .incbin "graphics/field_effects/unk_83CAF90.4bpp"
-
-gUnknown_83CAFB0:: @ 83CAFB0 gbapal
- .incbin "graphics/field_effects/unk_83CAFB0.gbapal"
-
-gUnknown_83CAFD0:: @ 83CAFD0 4bpp
- .incbin "graphics/field_effects/unk_83CAFD0.4bpp"
-
-gUnknown_83CB3D0:: @ 83CB3D0 gbapal
- .incbin "graphics/field_effects/unk_83CB3D0.gbapal"
-
-gUnknown_83CB3F0:: @ 83CB3F0 4bpp
- .incbin "graphics/field_effects/unk_83CB3F0.4bpp"
-
-gUnknown_83CB5F0:: @ 83CB5F0 4bpp
- .incbin "graphics/field_effects/unk_83CB5F0.4bpp"
-
-gUnknown_83CB7F0:: @ 83CB7F0 gbapal gUnknown_83CB5F0
- .incbin "graphics/field_effects/unk_83CB7F0.gbapal"
-
-gUnknown_83CB810:: @ 83CB810 4bpp
- .incbin "graphics/field_effects/unk_83CB810.bin"
-
-gUnknown_83CBA90:: @ 83CBA90 4bpp
- .incbin "graphics/field_effects/unk_83CBA90.4bpp"
-
-gUnknown_83CBB10:: @ 83CBB10 gbapal gUnknown_83CBA90
- .incbin "graphics/field_effects/unk_83CBB10.gbapal"
-
-gUnknown_83CBB30:: @ 83CBB30 4bpp
- .incbin "graphics/field_effects/unk_83CBB30.bin"
-
-gUnknown_83CBDB0::
- .incbin "graphics/field_effects/unk_83CBDB0.4bpp"
-
- .align 2
-gUnknown_83CBE30:: @ 83CBE30 dataptr
- .4byte FieldEffectCmd_loadtiles
- .4byte FieldEffectCmd_loadfadedpal
- .4byte FieldEffectCmd_loadpal
- .4byte FieldEffectCmd_callnative
- .4byte sub_80834DC
- .4byte FieldEffectCmd_loadgfx_callnative
- .4byte FieldEffectCmd_loadtiles_callnative
- .4byte FieldEffectCmd_loadfadedpal_callnative
-
-gUnknown_83CBE50:: @ 83CBE50 oamdata
- .4byte 0xc0000000, 0x00000000
-
-gOamData_83CBE58:: @ 83CBE58 oamdata
- .4byte 0x00000000, 0x00000000
-
-gOamData_83CBE60:: @ 83CBE60 oamdata
- .4byte 0x40000000, 0x00000000
-
-gUnknown_83CBE68:: @ 83CBE68 sprite_frames
- obj_frame_tiles gUnknown_83CA770, 0x0800
-
-gUnknown_83CBE70:: @ 83CBE70 sprite_palette
- obj_pal gUnknown_83CAF70, 4102
-
-gUnknown_83CBE78:: @ 83CBE78
- obj_image_anim_frame 0x0000, 1
- obj_image_anim_end
-
- .align 2
-gUnknown_83CBE80:: @ 83CBE80 dataptr
- .4byte gUnknown_83CBE78
-
-gUnknown_83CBE84:: @ 83CBE84 spr_template
- spr_template 65535, 4102, gUnknown_83CBE50, gUnknown_83CBE80, gUnknown_83CBE68, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gUnknown_83CBE9C:: @ 83CBE9C sprite_palette
- obj_pal gUnknown_83CAFB0, 4103
-
-gUnknown_83CBEA4:: @ 83CBEA4 sprite_palette
- obj_pal gUnknown_83CB3D0, 4112
-
-gOamData_83CBEAC:: @ 83CBEAC oam_data
- .4byte 0x80004000, 0x00000000
-
-gUnknown_83CBEB4:: @ 83CBEB4 sprite_frames
- obj_frame_tiles gUnknown_83CAF90, 0x0020
-
-gUnknown_83CBEBC:: @ 83CBEBC sprite_frames
- obj_frame_tiles gUnknown_83CAFD0 + 0x000, 0x0100
- obj_frame_tiles gUnknown_83CAFD0 + 0x100, 0x0100
- obj_frame_tiles gUnknown_83CAFD0 + 0x200, 0x0100
- obj_frame_tiles gUnknown_83CAFD0 + 0x300, 0x0100
-
-gUnknown_83CBEDC:: @ 83CBEDC sprite_frames
- obj_frame_tiles gUnknown_83CB3F0 + 0x000, 0x0080
- obj_frame_tiles gUnknown_83CB3F0 + 0x080, 0x0080
- obj_frame_tiles gUnknown_83CB3F0 + 0x100, 0x0080
- obj_frame_tiles gUnknown_83CB3F0 + 0x180, 0x0080
-
-gUnknown_83CBEFC:: @ 83CBEFC unknown
- .byte 0xf4, 0xf8, 0x01, 0x80
- .byte 0x04, 0xf8, 0x20, 0x80
- .byte 0xf4, 0x00, 0x31, 0x80
- .byte 0x04, 0x00, 0x50, 0x80
- .byte 0x04, 0x00, 0x00, 0x00
-
-gUnknown_83CBF10:: @ 83CBF10 dataptr
- .4byte gUnknown_83CBEFC
-
-gUnknown_83CBF14:: @ 83CBF14 unknown
- .byte 0xe0, 0xf8, 0x05, 0x80
- .byte 0x00, 0xf8, 0x45, 0x80
- .byte 0xe0, 0x00, 0x85, 0x80
- .byte 0x00, 0x00, 0xc5, 0x80
- .byte 0x04, 0x00, 0x00, 0x00
-
-gUnknown_83CBF28:: @ 83CBE28 dataptr
- .4byte gUnknown_83CBF14
-
-gUnknown_83CBF2C:: @ 83CBF2C animcmd
- obj_image_anim_frame 0x0000, 1
- obj_image_anim_jump 0
-
-gUnknown_83CBF34:: @ 83CBF34 animcmd
- obj_image_anim_frame 0x0001, 5
- obj_image_anim_frame 0x0002, 5
- obj_image_anim_frame 0x0003, 7
- obj_image_anim_frame 0x0002, 5
- obj_image_anim_frame 0x0001, 5
- obj_image_anim_frame 0x0000, 5
- obj_image_anim_loop 3
- obj_image_anim_end
-
- .align 2
-gUnknown_83CBF54:: @ 83CBF54 dataptr
- .4byte gUnknown_83CBF2C
- .4byte gUnknown_83CBF34
-
-gUnknown_83CBF5C:: @ 83CBF5C animcmd
- obj_image_anim_frame 0x0003, 8
- obj_image_anim_frame 0x0002, 8
- obj_image_anim_frame 0x0001, 8
- obj_image_anim_frame 0x0000, 8
- obj_image_anim_frame 0x0001, 8
- obj_image_anim_frame 0x0002, 8
- obj_image_anim_loop 2
- obj_image_anim_frame 0x0001, 8
- obj_image_anim_frame 0x0000, 8
- obj_image_anim_end
-
- .align 2
-gUnknown_83CBF84:: @ 83CBF84 dataptr
- .4byte gUnknown_83CBF5C
-
-gUnknown_83CBF88:: @ 83CBF88 spr_template
- spr_template 65535, 4103, gOamData_83CBE58, gUnknown_83CBF54, gUnknown_83CBEB4, gDummySpriteAffineAnimTable, SpriteCB_PokeballGlow
-
-gUnknown_83CBFA0:: @ 83CBFA0 spr_template
- spr_template 65535, 4103, gOamData_83CBEAC, gUnknown_83CBF54, gUnknown_83CBEBC, gDummySpriteAffineAnimTable, sub_808424C
-
-gUnknown_83CBFB8:: @ 83CBFB8 spr_template
- spr_template 65535, 4112, gOamData_83CBE60, gUnknown_83CBF84, gUnknown_83CBEDC, gDummySpriteAffineAnimTable, sub_80842AC
-
- .align 2
-gUnknown_83CBFD0:: @ 83CBFD0 dataptr
- .4byte PokecenterHealEffect_0
- .4byte PokecenterHealEffect_1
- .4byte sub_8083C78
- .4byte PokecenterHealEffect_3
-
- .align 2
-gUnknown_83CBFE0:: @ 83CBFE0 dataptr
- .4byte HallOfFameRecordEffect_0
- .4byte sub_8083D74
- .4byte sub_8083DAC
- .4byte sub_8083DD4
-
- .align 2
-gUnknown_83CBFF0:: @ 83CBFF0 dataptr
- .4byte PokeballGlowEffect_0
- .4byte PokeballGlowEffect_1
- .4byte PokeballGlowEffect_2
- .4byte PokeballGlowEffect_3
- .4byte PokeballGlowEffect_4
- .4byte PokeballGlowEffect_5
- .4byte PokeballGlowEffect_6
- .4byte nullsub_50
-
-gUnknown_83CC010:: @ 83CC010 data16
- .2byte 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0004, 0x0006, 0x0004, 0x0000, 0x0008, 0x0006, 0x0008
-
-gUnknown_83CC028:: @ 83CC028 data8
- .byte 0x10, 0x0c, 0x08, 0x00
-
-gUnknown_83CC02C:: @ 83CC02C data8
- .byte 0x10, 0x0c, 0x08, 0x00
-
-gUnknown_83CC030:: @ 83CC030 data8
- .byte 0x00, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_83CC034:: @ 83CC034 dataptr
- .4byte sub_80844BC
- .4byte sub_8084564
- .4byte sub_8084580
- .4byte sub_80845F4
- .4byte sub_80846AC
- .4byte sub_80846C8
- .4byte sub_8084708
-
- .align 2
-gUnknown_83CC050:: @ 83CC050 dataptr
- .4byte sub_80847F8
- .4byte sub_8084820
- .4byte sub_8084890
- .4byte sub_80848B4
- .4byte sub_80848C4
- .4byte sub_80848E8
-
- .align 2
-gUnknown_83CC068:: @ 83CC068 dataptr
- .4byte sub_8084A5C
- .4byte sub_8084AD8
- .4byte sub_8084B18
- .4byte sub_8084B78
- .4byte sub_8084BB8
- .4byte sub_8084C18
- .4byte sub_8084C3C
-
- .align 2
-gUnknown_83CC084:: @ 83CC084 dataptr
- .4byte sub_8084D24
- .4byte waterfall_1_do_anim_probably
- .4byte waterfall_2_wait_anim_finish_probably
- .4byte sub_8084DA4
- .4byte sub_8084DCC
-
- .align 2
-gUnknown_83CC098:: @ 83CC098 dataptr
- .4byte dive_1_lock
- .4byte dive_2_unknown
- .4byte dive_3_unknown
-
- .align 2
-gUnknown_83CC0A4:: @ 83CC0A4 dataptr
- .4byte sub_8084FA0
- .4byte sub_8084FD8
- .4byte sub_808500C
- .4byte sub_8085058
- .4byte sub_808514C
- .4byte sub_8085168
-
- .align 2
-gUnknown_83CC0BC:: @ 83CC0BC dataptr
- .4byte sub_8085244
- .4byte sub_8085274
- .4byte sub_80852C0
- .4byte sub_8085314
-
- .align 2
-gUnknown_83CC0CC:: @ 83CC0CC dataptr
- .4byte sub_8085440
- .4byte sub_8085470
- .4byte sub_80854EC
- .4byte sub_8085524
- .4byte sub_808554C
-
- .align 2
-gUnknown_83CC0E0:: @ 83CC0E0 dataptr
- .4byte sub_808566C
- .4byte sub_8085690
-
-gUnknown_83CC0E8:: @ 83CC0E8 data8
- .byte 0x01, 0x03, 0x04, 0x02, 0x01
-
- .align 2
-gUnknown_83CC0F0:: @ 83CC0F0 dataptr
- .4byte sub_8085A54
- .4byte sub_8085A80
-
- .align 2
-gUnknown_83CC0F8:: @ 83CC0F8 dataptr
- .4byte sub_8085BA8
- .4byte sub_8085BD0
- .4byte sub_8085C60
- .4byte sub_8085D34
-
-gUnknown_83CC108:: @ 83CC108 data8
- .byte 0x01, 0x03, 0x04, 0x02, 0x01
-
- .align 2
-gUnknown_83CC110:: @ 83CC110 dataptr
- .4byte sub_8085E0C
- .4byte sub_8085E98
- .4byte sub_8085F9C
-
- .align 2
-gUnknown_83CC11C:: @ 83CC11C dataptr
- .4byte sub_8086110
- .4byte sub_8086180
- .4byte sub_80861FC
- .4byte sub_8086288
- .4byte sub_80862B8
- .4byte sub_808630C
- .4byte sub_8086358
-
- .align 2
-gUnknown_83CC138:: @ 83CC138 dataptr
- .4byte sub_8086498
- .4byte sub_80864D4
- .4byte sub_8086554
- .4byte sub_80865C0
- .4byte sub_80865F0
- .4byte sub_8086630
- .4byte sub_8086650
-
- .align 2
-gUnknown_83CC154:: @ 83CC154 dataptr
- .4byte sub_80869C0
- .4byte sub_8086A20
- .4byte sub_8086A6C
- .4byte sub_8086AB4
- .4byte sub_8086B30
-
- .align 2
-gUnknown_83CC168:: @ 83CC168 dataptr
- .4byte sub_8086C00
- .4byte sub_8086C24
- .4byte sub_8086C70
- .4byte sub_8086CF4
-
-gUnknown_83CC178:: @ 83CC178 dataptr (incomplete)
- .4byte sub_8086E70
- .4byte sub_8086EC8
- .4byte sub_8086F0C
- .4byte sub_8086F64
- .4byte sub_8086FA8
- .4byte sub_8086FFC
- .4byte sub_808706C
- .4byte sub_8087118
- .4byte sub_8087138
-
-gUnknown_83CC19C:: @ 83CC19C affineanimcmd
- obj_rot_scal_anim_frame 8, 8, 226, 0
- obj_rot_scal_anim_frame 28, 28, 0, 30
- obj_rot_scal_anim_end
-
-gUnknown_83CC1B4:: @ 83CC1B4 affineanimcmd
- 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
-gUnknown_83CC1CC:: @ 83CC1CC dataptr
- .4byte gUnknown_83CC19C
- .4byte gUnknown_83CC1B4
-
- .align 2
-gUnknown_83CC1D4:: @ 83CC1D4 dataptr
- .4byte sub_80874C8
- .4byte sub_80875C8
- .4byte sub_8087644
- .4byte sub_8087698
- .4byte sub_8087710
- .4byte sub_8087748
- .4byte fishE
-
-gUnknown_83CC1F0:: @ 83CC1F0 data16
- .2byte 0xfffe, 0xfffc, 0xfffb, 0xfffa, 0xfff9, 0xfff8, 0xfff8, 0xfff8, 0xfff9, 0xfff9, 0xfffa, 0xfffb, 0xfffd, 0xfffe, 0x0000, 0x0002
- .2byte 0x0004, 0x0008
-
-gUnknown_83CC214:: @ 83CC214 affineanimcmd
- obj_rot_scal_anim_frame 24, 24, 0, 1
- obj_rot_scal_anim_jump 0
-
-gUnknown_83CC224:: @ 83CC224 affineanimcmd
- obj_rot_scal_anim_frame 512, 512, 0, 1
- obj_rot_scal_anim_frame -16, -16, 0, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gUnknown_83CC23C:: @ 83CC23C dataptr
- .4byte gUnknown_83CC214
- .4byte gUnknown_83CC224
-
-gUnknown_83CC244:: @ 83CC244 dataptr
- .4byte sub_8087C00
- .4byte sub_8087C2C
- .4byte sub_8087CB4
-
-gUnknown_83CC250:: @ 83CC250 sprite_frames
- obj_frame_tiles gUnknown_83CBDB0 + 0x00, 0x0020
- obj_frame_tiles gUnknown_83CBDB0 + 0x20, 0x0020
- obj_frame_tiles gUnknown_83CBDB0 + 0x40, 0x0020
- obj_frame_tiles gUnknown_83CBDB0 + 0x60, 0x0020
-
-gUnknown_83CC270:: @ 83CC270 animcmd
- obj_image_anim_frame 0x0000, 0
- obj_image_anim_end
-
-gUnknown_83CC278:: @ 83CC278 animcmd
- obj_image_anim_frame 0x0001, 0
- obj_image_anim_end
-
-gUnknown_83CC280:: @ 83CC280 animcmd
- obj_image_anim_frame 0x0002, 0
- obj_image_anim_end
-
-gUnknown_83CC288:: @ 83CC288 animcmd
- obj_image_anim_frame 0x0003, 0
- obj_image_anim_end
-
-gUnknown_83CC290:: @ 83CC290 dataptr
- .4byte gUnknown_83CC270
- .4byte gUnknown_83CC278
- .4byte gUnknown_83CC280
- .4byte gUnknown_83CC288
-
-gUnknown_83CC2A0:: @ 83CC2A0 spr_template
- spr_template 65535, 4371, gOamData_83CBE58, gUnknown_83CC290, gUnknown_83CC250, gDummySpriteAffineAnimTable, sub_8087D90
diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s
index cac76bea9..95d63568c 100644
--- a/data/field_effect_scripts.s
+++ b/data/field_effect_scripts.s
@@ -1,7 +1,7 @@
.include "asm/macros/field_effect_script.inc"
.section script_data, "aw", %progbits
.align 2
-gUnknown_81D96AC:: @ 81D96AC
+gFieldEffectScriptPointers:: @ 81D96AC
.4byte gFldEffScript_ExclamationMarkIcon
.4byte gFldEffScript_UseCutOnGrass
.4byte gFldEffScript_UseCutOnTree
@@ -67,9 +67,9 @@ gUnknown_81D96AC:: @ 81D96AC
.4byte gFldEffScript_HallOfFameRecord
.4byte gFldEffScript_UseTeleport
.4byte gFldEffScript_SmileyFaceIcon
- .4byte gFldEffScript_Unk41
+ .4byte gFldEffScript_UseVsSeeker
.4byte gFldEffScript_DoubleExclMarkIcon
- .4byte gFldEffScript_Unk43
+ .4byte gFldEffScript_MoveDeoxysRock
.4byte gFldEffScript_Unk44
.4byte gFldEffScript_Unk45
@@ -102,15 +102,15 @@ gFldEffScript_FieldMoveShowMon:: @ 81D97F0
end
gFldEffScript_Ash:: @ 81D97F6
- loadfadedpal_callnative gUnknown_83A5348, oei_ash
+ loadfadedpal_callnative gUnknown_83A5348, FldEff_Ash
end
gFldEffScript_SurfBlob:: @ 81D9800
- callnative sub_80DC3D0
+ callnative FldEff_SurfBlob
end
gFldEffScript_UseSurf:: @ 81D9806
- callnative sub_8086944
+ callnative FldEff_UseSurf
end
gFldEffScript_Dust:: @ 81D980C
@@ -165,7 +165,7 @@ gFldEffScript_Unknown22:: @ 81D987B
end
gFldEffScript_BerryTreeGrowthSparkle:: @ 81D9885
- callnative sub_80DC9DC
+ callnative FldEff_BerryTreeGrowthSparkle
end
gFldEffScript_DeepSandFootprints:: @ 81D988B
@@ -174,7 +174,7 @@ gFldEffScript_DeepSandFootprints:: @ 81D988B
gFldEffScript_PokecenterHeal:: @ 81D9895
loadfadedpal gUnknown_83CBE9C
- loadfadedpal_callnative gUnknown_83A5340, sub_8083B8C
+ loadfadedpal_callnative gUnknown_83A5340, FldEff_PokecenterHeal
end
gFldEffScript_UseSecretPowerTree:: @ 81D98A4
@@ -192,7 +192,7 @@ gFldEffScript_MountainDisguise:: @ 81D98AC
end
gFldEffScript_NpcflyOut:: @ 81D98B2
- callnative sub_8086D38
+ callnative FldEff_NpcFlyOut
end
gFldEffScript_UseFly:: @ 81D98B8
@@ -224,7 +224,7 @@ gFldEffScript_UseRockSmash:: @ 81D98E4
end
gFldEffScript_UseStrength:: @ 81D98EA
- callnative sub_80D0860
+ callnative FldEff_UseStrength
end
gFldEffScript_UseDig:: @ 81D98F0
@@ -236,15 +236,15 @@ gFldEffScript_SandPile:: @ 81D98F6
end
gFldEffScript_ShortGrass:: @ 81D9900
- loadfadedpal_callnative gUnknown_83A5348, sub_80DB808
+ loadfadedpal_callnative gUnknown_83A5348, FldEff_ShortGrass
end
gFldEffScript_HotSpringsWater:: @ 81D990A
- loadfadedpal_callnative gUnknown_83A5348, sub_80DBF50
+ loadfadedpal_callnative gUnknown_83A5348, FldEff_HotSpringsWater
end
gFldEffScript_UseWaterfall:: @ 81D9914
- callnative oei_waterfall
+ callnative FldEff_UseWaterfall
end
gFldEffScript_UseDive:: @ 81D991A
@@ -314,7 +314,7 @@ gFldEffScript_PcturnOn:: @ 81D9976
gFldEffScript_HallOfFameRecord:: @ 81D9977
loadfadedpal gUnknown_83CBE9C
- loadfadedpal_callnative gUnknown_83CBEA4, sub_8083CE0
+ loadfadedpal_callnative gUnknown_83CBEA4, FldEff_HallOfFameRecord
end
gFldEffScript_UseTeleport:: @ 81D9986
@@ -325,22 +325,22 @@ gFldEffScript_SmileyFaceIcon:: @ 81D998C
callnative FldEff_SmileyFaceIcon
end
-gFldEffScript_Unk41:: @ 81D9992
- callnative sub_8086BA8
+gFldEffScript_UseVsSeeker:: @ 81D9992
+ callnative FldEff_UseVsSeeker
end
gFldEffScript_DoubleExclMarkIcon:: @ 81D9998
callnative FldEff_DoubleExclMarkIcon
end
-gFldEffScript_Unk43:: @ 81D999E
- callnative sub_8087924
+gFldEffScript_MoveDeoxysRock:: @ 81D999E
+ callnative FldEff_MoveDeoxysRock
end
gFldEffScript_Unk44:: @ 81D99A4
- callnative sub_8087AB4
+ callnative FldEff_Unk44
end
gFldEffScript_Unk45:: @ 81D99AA
- callnative sub_8087E28
+ callnative FldEff_Unk45
end
diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h
index 08713a602..d2f0a945b 100644
--- a/include/constants/event_object_movement.h
+++ b/include/constants/event_object_movement.h
@@ -153,7 +153,7 @@
#define MOVEMENT_ACTION_PLAYER_RUN_UP_SLOW 0x42
#define MOVEMENT_ACTION_PLAYER_RUN_LEFT_SLOW 0x43
#define MOVEMENT_ACTION_PLAYER_RUN_RIGHT_SLOW 0x44
-#define MOVEMENT_ACTION_UNKNOWN_STEP_45 0x45
+#define MOVEMENT_ACTION_START_ANIM_IN_DIRECTION 0x45
#define MOVEMENT_ACTION_JUMP_SPECIAL_DOWN 0x46
#define MOVEMENT_ACTION_JUMP_SPECIAL_UP 0x47
#define MOVEMENT_ACTION_JUMP_SPECIAL_LEFT 0x48
diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h
index c56c97d73..5aa885b37 100644
--- a/include/constants/field_effects.h
+++ b/include/constants/field_effects.h
@@ -66,9 +66,9 @@
#define FLDEFF_HALL_OF_FAME_RECORD 62
#define FLDEFF_USE_TELEPORT 63
#define FLDEFF_SMILEY_FACE_ICON 64
-#define FLDEFF_UNK_41 65 // TODO: related to vs_seeker
+#define FLDEFF_USE_VS_SEEKER 65
#define FLDEFF_DOUBLE_EXCL_MARK_ICON 66
-#define FLDEFF_UNK_43 67 // TODO: related to deoxys
+#define FLDEFF_MOVE_DEOXYS_ROCK 67
#define FLDEFF_UNK_44 68 // TODO: related to ???
#define FLDEFF_UNK_45 69 // TODO: related to fame checker photos
diff --git a/include/data.h b/include/data.h
index f308b044c..90c8e0ace 100644
--- a/include/data.h
+++ b/include/data.h
@@ -28,7 +28,7 @@ extern const struct MonCoords gMonFrontPicCoords[];
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
extern const struct MonCoords gMonBackPicCoords[];
extern const struct CompressedSpriteSheet gMonBackPicTable[];
-extern const struct CompressedSpritePalette gMonPaletteTable[];
+extern struct CompressedSpritePalette gMonPaletteTable[];
extern const struct CompressedSpritePalette gMonShinyPaletteTable[];
extern const union AnimCmd *const *const gTrainerFrontAnimsPtrTable[];
extern const struct MonCoords gTrainerFrontPicCoords[];
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index baf66d737..edc5c8b11 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -41,7 +41,7 @@ void sub_808E16C(s16, s16);
void sub_808F28C(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat);
void sub_8092FF0(s16, s16, s16 *, s16 *);
u8 ObjectEventDirectionToImageAnimId(u8);
-void sub_80930E0(s16 *, s16 *, s16, s16);
+void sub_8063BC4(s16 *, s16 *, s16, s16);
void ObjectEventClearAnim(struct ObjectEvent *);
void ObjectEventClearAnimIfSpecialAnimActive(struct ObjectEvent *);
void SpawnObjectEventsInView(s16, s16);
@@ -116,6 +116,9 @@ void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 invisible);
bool32 RfuUnionObjectIsInvisible(u8 objectEventId);
void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo);
bool32 RfuUnionObjectIsWarping(u8 objectEventId);
+u8 sub_8063F2C(u8 direction);
+u8 sub_8064194(u8 direction);
+u8 sub_80641C0(u8 direction);
void sub_805F378(s16 x, s16 y);
@@ -128,5 +131,6 @@ extern const struct OamData gObjectEventBaseOam_32x32;
extern const struct UCoords16 gUnknown_83A64C8[];
extern const u16 gUnknown_8398648[];
extern const u16 gUnknown_8398688[];
+void sub_805F724(struct ObjectEvent *, s16 x, s16 y);
#endif // GUARD_EVENT_OBJECT_MOVEMENT_H
diff --git a/include/field_camera.h b/include/field_camera.h
index fb9861014..fdab03255 100644
--- a/include/field_camera.h
+++ b/include/field_camera.h
@@ -15,12 +15,12 @@ struct CameraObject
s32 y;
};
-extern struct CameraObject gUnknown_03005DD0;
+extern struct CameraObject gFieldCamera;
// Exported RAM declarations
-extern u16 gUnknown_03005DEC;
-extern u16 gUnknown_03005DE8;
+extern u16 gTotalCameraPixelOffsetX;
+extern u16 gTotalCameraPixelOffsetY;
// Exported ROM declarations
@@ -29,6 +29,7 @@ void CurrentMapDrawMetatileAt(int x, int y);
void sub_805A658(s16 *x, s16 *y);
void SetCameraPanningCallback(void (*cb)(void));
void SetCameraPanning(s16 x, s16 y);
+void UpdateCameraPanning(void);
void InstallCameraPanAheadCallback(void);
void DrawDoorMetatileAt(int x, int y, const u16 *data);
diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h
index 57a2fab66..a9ddd4b5c 100644
--- a/include/field_control_avatar.h
+++ b/include/field_control_avatar.h
@@ -8,5 +8,6 @@ extern u32 gUnknown_3005078;
void RestartWildEncounterImmunitySteps(void);
void ClearPoisonStepCounter(void);
void SetCableClubWarp(void);
+void dive_warp(struct MapPosition * pos, u16 behavior);
#endif //GUARD_FIELD_CONTROL_AVATAR_H
diff --git a/include/field_effect.h b/include/field_effect.h
index 3e30fa897..3c92afb6a 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -13,16 +13,16 @@ bool8 FieldEffectActiveListContains(u8 id);
void sub_80B69DC(void);
void CreateTeleportFieldEffectTask(void);
void FieldEffectActiveListRemove(u8 id);
-void sub_8085620(void);
+void StartEscapeRopeFieldEffect(void);
void FieldEffectStop(struct Sprite *sprite, u8 id);
u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer);
-void sub_8084454(void);
-void sub_8084784(u8 a0, u8 a1);
-void sub_8084F2C(u8 a0);
-void sub_80853CC(u8 a0);
+void FieldCB_FallWarpExit(void);
+void StartEscalatorWarp(u8 metatileBehavior, u8 priority);
+void StartLavaridgeGymB1FWarp(u8 a0);
+void StartLavaridgeGym1FWarp(u8 a0);
void sub_8083598(u8 a0);
-void sub_8083A5C(struct Sprite * sprite, u8 spriteId);
-u8 sub_8083970(u16 species, s16 x, s16 y, bool8 unused);
-void sub_80842C8(void);
+void FreeResourcesAndDestroySprite(struct Sprite * sprite, u8 spriteId);
+u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, bool8 unused);
+void ReturnToFieldFromFlyMapSelect(void);
#endif //GUARD_FIELD_EFFECTS_H
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index e1a56a26c..c3e5ae29a 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -15,6 +15,7 @@
u8 sub_8154228(void);
bool8 sub_8155DA0(struct ObjectEvent *);
void sub_80DC44C(u8, u8);
+void sub_80DC478(u8, u8);
void StartAshFieldEffect(s16, s16, u16, s16);
#endif //GUARD_FIELD_EFFECT_HELPERS_H
diff --git a/include/field_effect_scripts.h b/include/field_effect_scripts.h
new file mode 100644
index 000000000..fd3609d93
--- /dev/null
+++ b/include/field_effect_scripts.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_FIELD_EFFECT_SCRIPTS_H
+#define GUARD_FIELD_EFFECT_SCRIPTS_H
+
+extern const u8 *const gFieldEffectScriptPointers[];
+
+#endif //GUARD_FIELD_EFFECT_SCRIPTS_H
diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h
index 6683f5e2e..a1fe590fa 100644
--- a/include/field_fadetransition.h
+++ b/include/field_fadetransition.h
@@ -12,10 +12,11 @@ void DoFallWarp(void);
void sub_807E59C(void);
void sub_807E500(void);
void sub_807DF64(void);
-void sub_807DC18(void);
+void WarpFadeOutScreen(void);
void FieldCallback_ReturnToEventScript2(void);
-void sub_807DC00(void);
+void FadeInFromBlack(void);
void FadeTransition_FadeInOnReturnToStartMenu(void);
+void WarpFadeInScreen(void);
void sub_807DCE4(void);
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index e9553025c..5565fb64b 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -36,5 +36,6 @@ bool32 sub_805DC24(void);
bool8 PartyHasMonWithSurf(void);
bool8 IsPlayerSurfingNorth(void);
void player_get_pos_including_state_based_drift(s16 *x, s16 *y);
+void sub_805CBE8(void);
#endif //GUARD_FIELD_PLAYER_AVATAR_H
diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h
index ca7625782..aee7dc5a7 100644
--- a/include/field_screen_effect.h
+++ b/include/field_screen_effect.h
@@ -9,7 +9,6 @@ void sub_80B0244(void);
void sub_807E3EC(void);
void DoOutwardBarnDoorWipe(void);
void Task_BarnDoorWipe(u8 taskId);
-void sub_807DC00(void);
void sub_807F5F0(void);
#endif // GUARD_FIELD_SCREEN_EFFECT_H
diff --git a/include/field_weather.h b/include/field_weather.h
index de2543edb..7488c8c5a 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -18,5 +18,8 @@ void SetWeatherScreenFadeOut(void);
void sub_807B070(void);
u8 GetCurrentWeather(void);
void FieldWeather_StartFadingOutCreditsMap(u8, u8, u32);
+void sub_807AA8C(u8 palIdx);
+void ResetPreservedPalettesInWeather(void);
+void PreservePaletteInWeather(u8 palIdx);
#endif // GUARD_WEATHER_H
diff --git a/include/fldeff.h b/include/fldeff.h
index 56e2dfbd9..00f2d01f4 100644
--- a/include/fldeff.h
+++ b/include/fldeff.h
@@ -37,7 +37,7 @@ bool32 FldEffPoison_IsActive(void);
// strength
bool8 SetUpFieldMove_Strength(void);
-bool8 sub_80D0860(void);
+bool8 FldEff_UseStrength(void);
// teleport
bool8 SetUpFieldMove_Teleport(void);
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 57d8d0a35..b3f5b1d42 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -4,6 +4,13 @@
#define OBJECT_EVENTS_COUNT 16
#define METATILE_COLLISION_MASK 0x0C00
+#define METATILE_ID_MASK 0x03FF
+#define METATILE_ID_UNDEFINED 0x03FF
+#define METATILE_ELEVATION_SHIFT 12
+#define METATILE_COLLISION_SHIFT 10
+#define METATILE_ELEVATION_MASK 0xF000
+
+#define METATILE_ID(tileset, name) (METATILE_##tileset##_##name)
enum
{
@@ -17,8 +24,6 @@ enum
typedef void (*TilesetCB)(void);
-#define METATILE_ID(tileset, name) (METATILE_##tileset##_##name)
-
struct Tileset
{
/*0x00*/ bool8 isCompressed;
@@ -280,7 +285,7 @@ struct PlayerAvatar /* 0x202E858 */
/*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning.
/*0x04*/ u8 spriteId;
/*0x05*/ u8 objectEventId;
- /*0x06*/ u8 unk6;
+ /*0x06*/ bool8 preventStep;
/*0x07*/ u8 gender;
u8 acroBikeState;
u8 unk9;
diff --git a/include/overworld.h b/include/overworld.h
index 60bf34ae7..1775a6896 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -82,12 +82,16 @@ void sub_8084DD4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
void sub_8084E2C(s8, s8, s8, s8, s8);
void sub_8084E80(s8, s8, s8, s8, s8);
void sub_8084EBC(s16, s16);
+void sub_80555E0(void);
+void copy_saved_warp3_bank_and_enter_x_to_warp1(void);
+u8 IsMapTypeOutdoors(u8 mapType);
+void sav1_reset_battle_music_maybe(void);
+bool32 sub_8056124(u16 song);
void player_avatar_init_params_reset(void);
void Overworld_SetFlashLevel(s32 a1);
u8 Overworld_GetFlashLevel(void);
-void sub_8085524(u16);
void Overworld_SetSavedMusic(u16);
void Overworld_ChangeMusicToDefault(void);
@@ -155,7 +159,7 @@ u8 GetCurrentMapType(void);
u8 get_map_light_from_warp0(void);
const struct MapHeader *warp1_get_mapheader(void);
-void sub_8055F88(void);
+void TryFadeOutOldMapMusic(void);
void CB2_ReturnToFieldCableClub(void);
void ResetGameStats(void);
@@ -177,6 +181,8 @@ void sub_805546C(u8 a0);
bool32 sub_80582E0(void);
bool32 sub_8058274(void);
u8 GetCurrentMapBattleScene(void);
+void Overworld_ResetStateAfterFly(void);
+bool8 sub_8055B38(u16 metatileBehavior);
void sub_8055DB8(void);
void sub_8057F5C(void);
void sub_8057F34(void);
diff --git a/include/quest_log.h b/include/quest_log.h
index 6497ef69c..3241046bc 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -29,7 +29,7 @@ void sub_811539C(void);
void sub_8115748(u16);
u8 sub_8112CAC(void);
bool8 QuestLog_SchedulePlaybackCB(void (*func)(void));
-void sub_8111F38(u16, u16);
+void sub_8111F38(u16 offset, u16 idx);
void sub_8111134(void);
void DestroyHelpMessageWindow(u8 a0);
u8 CreateHelpMessageWindow(void);
@@ -50,6 +50,8 @@ void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value);
void sub_8110840(void *oldSave);
void sub_8112F18(u8 windowId);
bool8 sub_8111C2C(void);
+void sub_81128BC(u8 a0);
+void sub_811278C(u8, u8);
void Special_UpdateTrainerFansAfterLinkBattle(void);
#endif //GUARD_QUEST_LOG_H
diff --git a/include/special_field_anim.h b/include/special_field_anim.h
index d21c932bf..37c31f97b 100644
--- a/include/special_field_anim.h
+++ b/include/special_field_anim.h
@@ -3,7 +3,7 @@
#include "global.h"
-void StartEscalator(u8 a0);
+void StartEscalator(bool8 goingUp);
void StopEscalator(void);
bool8 IsEscalatorMoving(void);
diff --git a/ld_script.txt b/ld_script.txt
index 8a5964872..e16e57209 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -123,7 +123,7 @@ SECTIONS {
src/cable_club.o(.text);
src/trainer_see.o(.text);
src/wild_encounter.o(.text);
- asm/field_effect.o(.text);
+ src/field_effect.o(.text);
src/scanline_effect.o(.text);
src/option_menu.o(.text);
src/pokedex.o(.text);
@@ -444,7 +444,7 @@ SECTIONS {
src/cable_club.o(.rodata);
src/trainer_see.o(.rodata);
src/wild_encounter.o(.rodata);
- data/field_effect.o(.rodata);
+ src/field_effect.o(.rodata);
src/option_menu.o(.rodata);
src/trainer_card.o(.rodata);
data/pokemon_storage_system.o(.rodata);
diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h
index 35edcc76c..bb4f64a07 100644
--- a/src/data/pokemon_graphics/palette_table.h
+++ b/src/data/pokemon_graphics/palette_table.h
@@ -1,4 +1,5 @@
-const struct CompressedSpritePalette gMonPaletteTable[] =
+// A dirty hack because field_effect.c requires this not be const
+__attribute__((section(".rodata"))) struct CompressedSpritePalette gMonPaletteTable[] =
{
SPECIES_PAL(NONE, gMonPalette_CircledQuestionMark),
SPECIES_PAL(BULBASAUR, gMonPalette_Bulbasaur),
diff --git a/src/field_effect.c b/src/field_effect.c
new file mode 100644
index 000000000..9b2974f1f
--- /dev/null
+++ b/src/field_effect.c
@@ -0,0 +1,3907 @@
+#include "global.h"
+#include "gflib.h"
+#include "data.h"
+#include "decompress.h"
+#include "event_data.h"
+#include "event_object_movement.h"
+#include "field_camera.h"
+#include "field_control_avatar.h"
+#include "field_effect.h"
+#include "field_effect_helpers.h"
+#include "field_effect_scripts.h"
+#include "field_fadetransition.h"
+#include "field_player_avatar.h"
+#include "field_weather.h"
+#include "fieldmap.h"
+#include "help_system.h"
+#include "metatile_behavior.h"
+#include "new_menu_helpers.h"
+#include "overworld.h"
+#include "party_menu.h"
+#include "quest_log.h"
+#include "script.h"
+#include "special_field_anim.h"
+#include "task.h"
+#include "trainer_pokemon_sprites.h"
+#include "trig.h"
+#include "util.h"
+#include "constants/event_object_movement.h"
+#include "constants/metatile_behaviors.h"
+#include "constants/songs.h"
+
+#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))}
+#define FIELD_EFFECT_COUNT 32
+
+static u8 sFieldEffectActiveList[FIELD_EFFECT_COUNT];
+
+static void FieldEffectActiveListAdd(u8 fldeff);
+static bool8 FieldEffectCmd_loadtiles(const u8 **script, u32 *result);
+static bool8 FieldEffectCmd_loadfadedpal(const u8 **script, u32 *result);
+static bool8 FieldEffectCmd_loadpal(const u8 **script, u32 *result);
+static bool8 FieldEffectCmd_callnative(const u8 **script, u32 *result);
+static bool8 FieldEffectCmd_end(const u8 **script, u32 *result);
+static bool8 FieldEffectCmd_loadgfx_callnative(const u8 **script, u32 *result);
+static bool8 FieldEffectCmd_loadtiles_callnative(const u8 **script, u32 *result);
+static bool8 FieldEffectCmd_loadfadedpal_callnative(const u8 **script, u32 *result);
+static void FieldEffectScript_LoadTiles(const u8 **script);
+static void FieldEffectScript_LoadFadedPal(const u8 **script);
+static void FieldEffectScript_LoadPal(const u8 **script);
+static void FieldEffectScript_CallNative(const u8 **script, u32 *result);
+static void FieldEffectFreeTilesIfUnused(u16 tilesTag);
+static void FieldEffectFreePaletteIfUnused(u8 paletteNum);
+static void Task_PokecenterHeal(u8 taskId);
+static void SpriteCB_PokeballGlow(struct Sprite * sprite);
+static void SpriteCB_PokecenterMonitor(struct Sprite * sprite);
+static void SpriteCB_HallOfFameMonitor(struct Sprite * sprite);
+
+static const u16 sNewGameOakObjectSpriteTiles[] = INCBIN_U16("graphics/field_effects/unk_83CA770.4bpp");
+static const u16 sNewGameOakObjectPals[] = INCBIN_U16("graphics/field_effects/unk_83CAF70.gbapal");
+static const u16 sUnknown_83CAF90[] = INCBIN_U16("graphics/field_effects/unk_83CAF90.4bpp");
+static const u16 sUnknown_83CAFB0[] = INCBIN_U16("graphics/field_effects/unk_83CAFB0.gbapal");
+static const u16 sUnknown_83CAFD0[] = INCBIN_U16("graphics/field_effects/unk_83CAFD0.4bpp");
+static const u16 sUnknown_83CB3D0[] = INCBIN_U16("graphics/field_effects/unk_83CB3D0.gbapal");
+static const u16 sUnknown_83CB3F0[] = INCBIN_U16("graphics/field_effects/unk_83CB3F0.4bpp");
+static const u16 sFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CB5F0.4bpp");
+static const u16 sFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CB7F0.gbapal");
+static const u16 sFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CB810.bin");
+static const u16 sDarknessFieldMoveStreaksTiles[] = INCBIN_U16("graphics/field_effects/unk_83CBA90.4bpp");
+static const u16 sDarknessFieldMoveStreaksPalette[] = INCBIN_U16("graphics/field_effects/unk_83CBB10.gbapal");
+static const u16 sDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/field_effects/unk_83CBB30.bin");
+static const u16 sFldEffUnk44_Tiles[] = INCBIN_U16("graphics/field_effects/unk_83CBDB0.4bpp");
+
+static bool8 (*const sFldEffScrcmdTable[])(const u8 **script, u32 *result) = {
+ FieldEffectCmd_loadtiles,
+ FieldEffectCmd_loadfadedpal,
+ FieldEffectCmd_loadpal,
+ FieldEffectCmd_callnative,
+ FieldEffectCmd_end,
+ FieldEffectCmd_loadgfx_callnative,
+ FieldEffectCmd_loadtiles_callnative,
+ FieldEffectCmd_loadfadedpal_callnative
+};
+
+static const struct OamData sNewGameOakOamAttributes = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0x000,
+ .priority = 0,
+ .paletteNum = 0x0,
+ .affineParam = 0
+};
+
+static const struct OamData sOamData_8x8 = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(8x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x8),
+ .tileNum = 0x000,
+ .priority = 0,
+ .paletteNum = 0x0,
+ .affineParam = 0
+};
+
+static const struct OamData sOamData_16x16 = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x16),
+ .tileNum = 0x000,
+ .priority = 0,
+ .paletteNum = 0x0,
+ .affineParam = 0
+};
+
+static const struct SpriteFrameImage sNewGameOakObjectSpriteFrames[] = {
+ {sNewGameOakObjectSpriteTiles, 0x800}
+};
+
+static const struct SpritePalette sNewGameOakObjectPaletteInfo = {
+ sNewGameOakObjectPals, 4102
+};
+
+static const union AnimCmd sNewGameOakAnim[] = {
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sNewGameOakAnimTable[] = {
+ sNewGameOakAnim
+};
+
+static const struct SpriteTemplate sNewGameOakObjectTemplate = {
+ .tileTag = SPRITE_INVALID_TAG,
+ .paletteTag = 4102,
+ .oam = &sNewGameOakOamAttributes,
+ .anims = sNewGameOakAnimTable,
+ .images = sNewGameOakObjectSpriteFrames,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+const struct SpritePalette gUnknown_83CBE9C = {
+ sUnknown_83CAFB0, 4103
+};
+
+const struct SpritePalette gUnknown_83CBEA4 = {
+ sUnknown_83CB3D0, 4112
+};
+
+static const struct OamData sOamData_83CBEAC = {
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = FALSE,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(32x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x16),
+ .tileNum = 0x000,
+ .priority = 0,
+ .paletteNum = 0x0,
+ .affineParam = 0
+};
+
+static const struct SpriteFrameImage sUnknown_83CBEB4[] = {
+ {sUnknown_83CAF90, 0x20}
+};
+
+static const struct SpriteFrameImage sUnknown_83CBEBC[] = {
+ {sUnknown_83CAFD0 + 0x000, 0x100},
+ {sUnknown_83CAFD0 + 0x080, 0x100},
+ {sUnknown_83CAFD0 + 0x100, 0x100},
+ {sUnknown_83CAFD0 + 0x180, 0x100}
+};
+
+static const struct SpriteFrameImage sUnknown_83CBEDC[] = {
+ {sUnknown_83CB3F0 + 0x00, 0x80},
+ {sUnknown_83CB3F0 + 0x40, 0x80},
+ {sUnknown_83CB3F0 + 0x80, 0x80},
+ {sUnknown_83CB3F0 + 0xC0, 0x80}
+};
+
+static const struct Subsprite sUnknown_83CBEFC[] =
+{
+ {
+ .x = -12,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 0,
+ .priority = 2
+ }, {
+ .x = 4,
+ .y = -8,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 2,
+ .priority = 2
+ }, {
+ .x = -12,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 3,
+ .priority = 2
+ }, {
+ .x = 4,
+ .y = 0,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 5,
+ .priority = 2
+ }
+};
+
+static const struct SubspriteTable sUnknown_83CBF0C = subsprite_table(sUnknown_83CBEFC);
+
+static const struct Subsprite sUnknown_83CBF14[] =
+{
+ {
+ .x = -32,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 2
+ }, {
+ .x = 0,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 2
+ }, {
+ .x = -32,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 2
+ }, {
+ .x = 0,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 2
+ }
+};
+
+static const struct SubspriteTable sUnknown_83CBF24 = subsprite_table(sUnknown_83CBF14);
+
+static const union AnimCmd sUnknown_83CBF2C[] = {
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd sUnknown_83CBF34[] = {
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(3, 7),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_LOOP(3),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sUnknown_83CBF54[] = {
+ sUnknown_83CBF2C,
+ sUnknown_83CBF34
+};
+
+static const union AnimCmd sUnknown_83CBF5C[] = {
+ ANIMCMD_FRAME(3, 8),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_LOOP(2),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sUnknown_83CBF84[] = {
+ sUnknown_83CBF5C
+};
+
+static const struct SpriteTemplate sUnknown_83CBF88 = {
+ .tileTag = SPRITE_INVALID_TAG,
+ .paletteTag = 4103,
+ .oam = &sOamData_8x8,
+ .anims = sUnknown_83CBF54,
+ .images = sUnknown_83CBEB4,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PokeballGlow
+};
+
+static const struct SpriteTemplate sUnknown_83CBFA0 = {
+ .tileTag = SPRITE_INVALID_TAG,
+ .paletteTag = 4103,
+ .oam = &sOamData_83CBEAC,
+ .anims = sUnknown_83CBF54,
+ .images = sUnknown_83CBEBC,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PokecenterMonitor
+};
+
+static const struct SpriteTemplate sUnknown_83CBFB8 = {
+ .tileTag = SPRITE_INVALID_TAG,
+ .paletteTag = 4112,
+ .oam = &sOamData_16x16,
+ .anims = sUnknown_83CBF84,
+ .images = sUnknown_83CBEDC,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_HallOfFameMonitor
+};
+
+
+u32 FieldEffectStart(u8 fldeff)
+{
+ const u8 *script;
+ u32 result;
+ FieldEffectActiveListAdd(fldeff);
+ script = gFieldEffectScriptPointers[fldeff];
+ while (sFldEffScrcmdTable[*script](&script, &result))
+ ;
+ return result;
+}
+
+static bool8 FieldEffectCmd_loadtiles(const u8 **script, u32 *result)
+{
+ (*script)++;
+ FieldEffectScript_LoadTiles(script);
+ return TRUE;
+}
+
+static bool8 FieldEffectCmd_loadfadedpal(const u8 **script, u32 *result)
+{
+ (*script)++;
+ FieldEffectScript_LoadFadedPal(script);
+ return TRUE;
+}
+
+static bool8 FieldEffectCmd_loadpal(const u8 **script, u32 *result)
+{
+ (*script)++;
+ FieldEffectScript_LoadPal(script);
+ return TRUE;
+}
+static bool8 FieldEffectCmd_callnative(const u8 **script, u32 *result)
+{
+ (*script)++;
+ FieldEffectScript_CallNative(script, result);
+ return TRUE;
+}
+
+static bool8 FieldEffectCmd_end(const u8 **script, u32 *result)
+{
+ return FALSE;
+}
+
+static bool8 FieldEffectCmd_loadgfx_callnative(const u8 **script, u32 *result)
+{
+ (*script)++;
+ FieldEffectScript_LoadTiles(script);
+ FieldEffectScript_LoadFadedPal(script);
+ FieldEffectScript_CallNative(script, result);
+ return TRUE;
+}
+
+static bool8 FieldEffectCmd_loadtiles_callnative(const u8 **script, u32 *result)
+{
+ (*script)++;
+ FieldEffectScript_LoadTiles(script);
+ FieldEffectScript_CallNative(script, result);
+ return TRUE;
+}
+
+static bool8 FieldEffectCmd_loadfadedpal_callnative(const u8 **script, u32 *result)
+{
+ (*script)++;
+ FieldEffectScript_LoadFadedPal(script);
+ FieldEffectScript_CallNative(script, result);
+ return TRUE;
+}
+
+static u32 FieldEffectScript_ReadWord(const u8 **script)
+{
+ return T2_READ_32(*script);
+}
+
+static void FieldEffectScript_LoadTiles(const u8 **script)
+{
+ const struct SpriteSheet * spriteSheet = (const struct SpriteSheet * )FieldEffectScript_ReadWord(script);
+ if (GetSpriteTileStartByTag(spriteSheet->tag) == 0xFFFF)
+ LoadSpriteSheet(spriteSheet);
+ *script += sizeof(u32);
+}
+
+void sub_8083598(u8 paletteIdx)
+{
+ switch (gUnknown_2036E28)
+ {
+ case 0:
+ return;
+ case 1:
+ TintPalette_GrayScale(&gPlttBufferUnfaded[(paletteIdx + 16) * 16], 0x10);
+ break;
+ case 2:
+ TintPalette_SepiaTone(&gPlttBufferUnfaded[(paletteIdx + 16) * 16], 0x10);
+ break;
+ case 3:
+ sub_8111F38((paletteIdx + 16) * 16, 0x10);
+ TintPalette_GrayScale(&gPlttBufferUnfaded[(paletteIdx + 16) * 16], 0x10);
+ break;
+ default:
+ return;
+ }
+ CpuFastCopy(&gPlttBufferUnfaded[(paletteIdx + 16) * 16], &gPlttBufferFaded[(paletteIdx + 16) * 16], 0x20);
+}
+
+static void FieldEffectScript_LoadFadedPal(const u8 **script)
+{
+ const struct SpritePalette * spritePalette = (const struct SpritePalette * )FieldEffectScript_ReadWord(script);
+ u8 idx = IndexOfSpritePaletteTag(spritePalette->tag);
+ LoadSpritePalette(spritePalette);
+ if (idx == 0xFF)
+ sub_8083598(IndexOfSpritePaletteTag(spritePalette->tag));
+ sub_807AA8C(IndexOfSpritePaletteTag(spritePalette->tag));
+ *script += sizeof(u32);
+}
+
+static void FieldEffectScript_LoadPal(const u8 **script)
+{
+ const struct SpritePalette * spritePalette = (const struct SpritePalette * )FieldEffectScript_ReadWord(script);
+ u8 idx = IndexOfSpritePaletteTag(spritePalette->tag);
+ LoadSpritePalette(spritePalette);
+ if (idx != 0xFF)
+ sub_8083598(IndexOfSpritePaletteTag(spritePalette->tag));
+ *script += sizeof(u32);
+}
+
+static void FieldEffectScript_CallNative(const u8 **script, u32 *result)
+{
+ u32 (*func)(void) = (u32 (*)(void))FieldEffectScript_ReadWord(script);
+ *result = func();
+ *script += sizeof(u32);
+}
+
+static void FieldEffectFreeGraphicsResources(struct Sprite * sprite)
+{
+ u16 tileStart = sprite->sheetTileStart;
+ u8 paletteNum = sprite->oam.paletteNum;
+ DestroySprite(sprite);
+ FieldEffectFreeTilesIfUnused(tileStart);
+ FieldEffectFreePaletteIfUnused(paletteNum);
+}
+
+void FieldEffectStop(struct Sprite * sprite, u8 fldeff)
+{
+ FieldEffectFreeGraphicsResources(sprite);
+ FieldEffectActiveListRemove(fldeff);
+}
+
+static void FieldEffectFreeTilesIfUnused(u16 tileStart)
+{
+ u8 i;
+ u16 tileTag = GetSpriteTileTagByTileStart(tileStart);
+ if (tileTag == SPRITE_INVALID_TAG)
+ return;
+ for (i = 0; i < MAX_SPRITES; i++)
+ {
+ if (gSprites[i].inUse && gSprites[i].usingSheet && tileStart == gSprites[i].sheetTileStart)
+ return;
+ }
+ FreeSpriteTilesByTag(tileTag);
+}
+
+static void FieldEffectFreePaletteIfUnused(u8 paletteNum)
+{
+ u8 i;
+ u16 paletteTag = GetSpritePaletteTagByPaletteNum(paletteNum);
+ if (paletteTag == SPRITE_INVALID_TAG)
+ return;
+ for (i = 0; i < MAX_SPRITES; i++)
+ {
+ if (gSprites[i].inUse && gSprites[i].oam.paletteNum == paletteNum)
+ return;
+ }
+ FreeSpritePaletteByTag(paletteTag);
+}
+
+void FieldEffectActiveListClear(void)
+{
+ u8 i;
+ for (i = 0; i < FIELD_EFFECT_COUNT; i++)
+ {
+ sFieldEffectActiveList[i] = 0xFF;
+ }
+}
+
+static void FieldEffectActiveListAdd(u8 fldeff)
+{
+ u8 i;
+ for (i = 0; i < FIELD_EFFECT_COUNT; i++)
+ {
+ if (sFieldEffectActiveList[i] == 0xFF)
+ {
+ sFieldEffectActiveList[i] = fldeff;
+ return;
+ }
+ }
+}
+
+void FieldEffectActiveListRemove(u8 fldeff)
+{
+ u8 i;
+ for (i = 0; i < FIELD_EFFECT_COUNT; i++)
+ {
+ if (sFieldEffectActiveList[i] == fldeff)
+ {
+ sFieldEffectActiveList[i] = 0xFF;
+ return;
+ }
+ }
+}
+
+bool8 FieldEffectActiveListContains(u8 fldeff)
+{
+ u8 i;
+ for (i = 0; i < FIELD_EFFECT_COUNT; i++)
+ {
+ if (sFieldEffectActiveList[i] == fldeff)
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer)
+{
+ struct SpriteTemplate spriteTemplate;
+ LoadCompressedSpritePaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[trainerSpriteID], buffer);
+ LoadCompressedSpriteSheetOverrideBuffer(&gTrainerFrontPicTable[trainerSpriteID], buffer);
+ spriteTemplate.tileTag = gTrainerFrontPicTable[trainerSpriteID].tag;
+ spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[trainerSpriteID].tag;
+ spriteTemplate.oam = &sNewGameOakOamAttributes;
+ spriteTemplate.anims = gDummySpriteAnimTable;
+ spriteTemplate.images = NULL;
+ spriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ spriteTemplate.callback = SpriteCallbackDummy;
+ return CreateSprite(&spriteTemplate, x, y, subpriority);
+}
+
+static void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest)
+{
+ LZDecompressVram(gTrainerFrontPicTable[gender].data, dest);
+ LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, 0x20);
+}
+
+static u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority)
+{
+ LoadSpritePalette(&sNewGameOakObjectPaletteInfo);
+ return CreateSprite(&sNewGameOakObjectTemplate, x, y, subpriority);
+}
+
+u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
+{
+ u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, 0, 0x8000, TRUE, x, y, 0, gMonPaletteTable[species].tag);
+ PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[species].tag) + 0x10);
+ if (spriteId == 0xFFFF)
+ return MAX_SPRITES;
+ else
+ return spriteId;
+}
+
+static u8 CreateMonSprite_FieldMove(u16 species, u32 otId, u32 personality, s16 x, s16 y, u8 subpriority)
+{
+ const struct CompressedSpritePalette * spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
+ u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, 1, x, y, 0, spritePalette->tag);
+ PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
+ if (spriteId == 0xFFFF)
+ return MAX_SPRITES;
+ else
+ return spriteId;
+}
+
+void FreeResourcesAndDestroySprite(struct Sprite * sprite, u8 spriteId)
+{
+ ResetPreservedPalettesInWeather();
+ if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF)
+ {
+ FreeOamMatrix(sprite->oam.matrixNum);
+ }
+ FreeAndDestroyMonPicSprite(spriteId);
+}
+
+// r, g, b are between 0 and 16
+void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
+{
+ int curRed;
+ int curGreen;
+ int curBlue;
+ u16 outPal;
+
+ outPal = gPlttBufferUnfaded[i];
+ curRed = outPal & 0x1f;
+ curGreen = (outPal & (0x1f << 5)) >> 5;
+ curBlue = (outPal & (0x1f << 10)) >> 10;
+ curRed += (((0x1f - curRed) * r) >> 4);
+ curGreen += (((0x1f - curGreen) * g) >> 4);
+ curBlue += (((0x1f - curBlue) * b) >> 4);
+ outPal = curRed;
+ outPal |= curGreen << 5;
+ outPal |= curBlue << 10;
+ gPlttBufferFaded[i] = outPal;
+}
+
+// r, g, b are between 0 and 16
+static void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
+{
+ int curRed;
+ int curGreen;
+ int curBlue;
+ u16 outPal;
+
+ outPal = gPlttBufferUnfaded[i];
+ curRed = outPal & 0x1f;
+ curGreen = (outPal & (0x1f << 5)) >> 5;
+ curBlue = (outPal & (0x1f << 10)) >> 10;
+ curRed -= ((curRed * r) >> 4);
+ curGreen -= ((curGreen * g) >> 4);
+ curBlue -= ((curBlue * b) >> 4);
+ outPal = curRed;
+ outPal |= curGreen << 5;
+ outPal |= curBlue << 10;
+ gPlttBufferFaded[i] = outPal;
+}
+
+static void PokecenterHealEffect_0(struct Task * task);
+static void PokecenterHealEffect_1(struct Task * task);
+static void PokecenterHealEffect_2(struct Task * task);
+static void PokecenterHealEffect_3(struct Task * task);
+static void HallOfFameRecordEffect_0(struct Task * task);
+static void HallOfFameRecordEffect_1(struct Task * task);
+static void HallOfFameRecordEffect_2(struct Task * task);
+static void HallOfFameRecordEffect_3(struct Task * task);
+static void Task_HallOfFameRecord(u8 taskId);
+static u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare);
+static void SpriteCB_PokeballGlowEffect(struct Sprite * sprite);
+static void PokeballGlowEffect_0(struct Sprite * sprite);
+static void PokeballGlowEffect_1(struct Sprite * sprite);
+static void PokeballGlowEffect_2(struct Sprite * sprite);
+static void PokeballGlowEffect_3(struct Sprite * sprite);
+static void PokeballGlowEffect_4(struct Sprite * sprite);
+static void PokeballGlowEffect_5(struct Sprite * sprite);
+static void PokeballGlowEffect_6(struct Sprite * sprite);
+static void PokeballGlowEffect_7(struct Sprite * sprite);
+static u8 PokecenterHealEffectHelper(s32 x, s32 y);
+static void HallOfFameRecordEffectHelper(s32 x, s32 y);
+
+static void (*const sPokecenterHealTaskCBTable[])(struct Task * ) = {
+ PokecenterHealEffect_0,
+ PokecenterHealEffect_1,
+ PokecenterHealEffect_2,
+ PokecenterHealEffect_3
+};
+
+static void (*const sHallOfFameRecordTaskCBTable[])(struct Task * ) = {
+ HallOfFameRecordEffect_0,
+ HallOfFameRecordEffect_1,
+ HallOfFameRecordEffect_2,
+ HallOfFameRecordEffect_3
+};
+
+static void (*const sPokeballGlowSpriteCBTable[])(struct Sprite * ) = {
+ PokeballGlowEffect_0,
+ PokeballGlowEffect_1,
+ PokeballGlowEffect_2,
+ PokeballGlowEffect_3,
+ PokeballGlowEffect_4,
+ PokeballGlowEffect_5,
+ PokeballGlowEffect_6,
+ PokeballGlowEffect_7
+};
+
+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] = 0x80;
+ task->data[5] = 0x18;
+ return FALSE;
+}
+
+static void Task_PokecenterHeal(u8 taskId)
+{
+ struct Task * task = &gTasks[taskId];
+ sPokecenterHealTaskCBTable[task->data[0]](task);
+}
+
+static void PokecenterHealEffect_0(struct Task * task)
+{
+ task->data[0]++;
+ task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], TRUE);
+ task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]);
+}
+
+static void PokecenterHealEffect_1(struct Task * task)
+{
+ if (gSprites[task->data[6]].data[0] > 1)
+ {
+ gSprites[task->data[7]].data[0]++;
+ task->data[0]++;
+ }
+}
+
+static void PokecenterHealEffect_2(struct Task * task)
+{
+ if (gSprites[task->data[6]].data[0] > 4)
+ {
+ task->data[0]++;
+ }
+}
+
+static void PokecenterHealEffect_3(struct Task * task)
+{
+ if (gSprites[task->data[6]].data[0] > 6)
+ {
+ DestroySprite(&gSprites[task->data[6]]);
+ FieldEffectActiveListRemove(FLDEFF_POKECENTER_HEAL);
+ DestroyTask(FindTaskIdByFunc(Task_PokecenterHeal));
+ }
+}
+
+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] = 0x3C;
+ return FALSE;
+}
+
+static void Task_HallOfFameRecord(u8 taskId)
+{
+ struct Task * task;
+ task = &gTasks[taskId];
+ sHallOfFameRecordTaskCBTable[task->data[0]](task);
+}
+
+static void HallOfFameRecordEffect_0(struct Task * task)
+{
+ u8 taskId;
+ task->data[0]++;
+ task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], FALSE);
+}
+
+static void HallOfFameRecordEffect_1(struct Task * task)
+{
+ if (gSprites[task->data[6]].data[0] > 1)
+ {
+ HallOfFameRecordEffectHelper(0x78, 0x19);
+ task->data[15]++; // was this ever initialized? is this ever used?
+ task->data[0]++;
+ }
+}
+
+static void HallOfFameRecordEffect_2(struct Task * task)
+{
+ if (gSprites[task->data[6]].data[0] > 4)
+ {
+ task->data[0]++;
+ }
+}
+
+static void HallOfFameRecordEffect_3(struct Task * task)
+{
+ if (gSprites[task->data[6]].data[0] > 6)
+ {
+ DestroySprite(&gSprites[task->data[6]]);
+ FieldEffectActiveListRemove(FLDEFF_HALL_OF_FAME_RECORD);
+ DestroyTask(FindTaskIdByFunc(Task_HallOfFameRecord));
+ }
+}
+
+static u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+ spriteId = CreateInvisibleSprite(SpriteCB_PokeballGlowEffect);
+ sprite = &gSprites[spriteId];
+ sprite->pos2.x = x;
+ sprite->pos2.y = y;
+ sprite->subpriority = 0xFF;
+ sprite->data[5] = fanfare;
+ sprite->data[6] = duration;
+ sprite->data[7] = spriteId;
+ return spriteId;
+}
+
+static void SpriteCB_PokeballGlowEffect(struct Sprite * sprite)
+{
+ sPokeballGlowSpriteCBTable[sprite->data[0]](sprite);
+}
+
+static const struct Coords16 sUnknown_83CC010[] = {
+ {0, 0},
+ {6, 0},
+ {0, 4},
+ {6, 4},
+ {0, 8},
+ {6, 8}
+};
+
+static const u8 sUnknown_83CC028[] = {16, 12, 8, 0};
+static const u8 sUnknown_83CC02C[] = {16, 12, 8, 0};
+static const u8 sUnknown_83CC030[] = { 0, 0, 0, 0};
+
+static void PokeballGlowEffect_0(struct Sprite * sprite)
+{
+ u8 endSpriteId;
+ if (sprite->data[1] == 0 || (--sprite->data[1]) == 0)
+ {
+ sprite->data[1] = 25;
+ endSpriteId = CreateSpriteAtEnd(&sUnknown_83CBF88, sUnknown_83CC010[sprite->data[2]].x + sprite->pos2.x, sUnknown_83CC010[sprite->data[2]].y + sprite->pos2.y, 0xFF);
+ gSprites[endSpriteId].oam.priority = 2;
+ gSprites[endSpriteId].data[0] = sprite->data[7];
+ sprite->data[2]++;
+ sprite->data[6]--;
+ PlaySE(SE_BOWA);
+ }
+ if (sprite->data[6] == 0)
+ {
+ sprite->data[1] = 32;
+ sprite->data[0]++;
+ }
+}
+
+static void PokeballGlowEffect_1(struct Sprite * sprite)
+{
+ if ((--sprite->data[1]) == 0)
+ {
+ sprite->data[0]++;
+ sprite->data[1] = 8;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ if (sprite->data[5])
+ {
+ PlayFanfare(MUS_ME_ASA);
+ }
+ }
+}
+
+static void PokeballGlowEffect_2(struct Sprite * sprite)
+{
+ u8 phase;
+ if ((--sprite->data[1]) == 0)
+ {
+ sprite->data[1] = 8;
+ sprite->data[2]++;
+ sprite->data[2] &= 3;
+ if (sprite->data[2] == 0)
+ {
+ sprite->data[3]++;
+ }
+ }
+ phase = (sprite->data[2] + 3) & 3;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]);
+ phase = (sprite->data[2] + 2) & 3;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]);
+ phase = (sprite->data[2] + 1) & 3;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]);
+ phase = sprite->data[2];
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]);
+ if (sprite->data[3] > 2)
+ {
+ sprite->data[0]++;
+ sprite->data[1] = 8;
+ sprite->data[2] = 0;
+ }
+}
+
+static void PokeballGlowEffect_3(struct Sprite * sprite)
+{
+ u8 phase;
+ if ((--sprite->data[1]) == 0)
+ {
+ sprite->data[1] = 8;
+ sprite->data[2]++;
+ sprite->data[2] &= 3;
+ if (sprite->data[2] == 3)
+ {
+ sprite->data[0]++;
+ sprite->data[1] = 30;
+ }
+ }
+ phase = sprite->data[2];
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, sUnknown_83CC028[phase], sUnknown_83CC02C[phase], sUnknown_83CC030[phase]);
+}
+
+static void PokeballGlowEffect_4(struct Sprite * sprite)
+{
+ if ((--sprite->data[1]) == 0)
+ {
+ sprite->data[0]++;
+ }
+}
+
+static void PokeballGlowEffect_5(struct Sprite * sprite)
+{
+ sprite->data[0]++;
+}
+
+static void PokeballGlowEffect_6(struct Sprite * sprite)
+{
+ if (sprite->data[5] == 0 || IsFanfareTaskInactive())
+ {
+ sprite->data[0]++;
+ }
+}
+
+static void PokeballGlowEffect_7(struct Sprite * sprite)
+{
+}
+
+static void SpriteCB_PokeballGlow(struct Sprite * sprite)
+{
+ if (gSprites[sprite->data[0]].data[0] > 4)
+ FieldEffectFreeGraphicsResources(sprite);
+}
+
+static u8 PokecenterHealEffectHelper(s32 x, s32 y)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+ spriteId = CreateSpriteAtEnd(&sUnknown_83CBFA0, x, y, 0);
+ sprite = &gSprites[spriteId];
+ sprite->oam.priority = 2;
+ sprite->invisible = TRUE;
+ return spriteId;
+}
+
+static void SpriteCB_PokecenterMonitor(struct Sprite * sprite)
+{
+ if (sprite->data[0] != 0)
+ {
+ sprite->data[0] = 0;
+ sprite->invisible = FALSE;
+ StartSpriteAnim(sprite, 1);
+ }
+ if (sprite->animEnded)
+ FieldEffectFreeGraphicsResources(sprite);
+}
+
+static void HallOfFameRecordEffectHelper(s32 x, s32 y)
+{
+ CreateSpriteAtEnd(&sUnknown_83CBFB8, x, y, 0);
+}
+
+static void SpriteCB_HallOfFameMonitor(struct Sprite * sprite)
+{
+ if (sprite->animEnded)
+ FieldEffectFreeGraphicsResources(sprite);
+}
+
+static void FieldCallback_Fly(void);
+static void Task_FlyOut(u8 taskId);
+static void FieldCallback_FlyArrive(void);
+static void Task_FlyIn(u8 taskId);
+
+void ReturnToFieldFromFlyMapSelect(void)
+{
+ SetMainCallback2(CB2_ReturnToField);
+ gFieldCallback = FieldCallback_Fly;
+}
+
+static void FieldCallback_Fly(void)
+{
+ FadeInFromBlack();
+ CreateTask(Task_FlyOut, 0);
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ gFieldCallback = NULL;
+}
+
+static void Task_FlyOut(u8 taskId)
+{
+ struct Task * task;
+ task = &gTasks[taskId];
+ if (task->data[0] == 0)
+ {
+ if (!IsWeatherNotFadingIn())
+ return;
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ if ((int)gFieldEffectArguments[0] >= PARTY_SIZE)
+ gFieldEffectArguments[0] = 0;
+ FieldEffectStart(FLDEFF_USE_FLY);
+ task->data[0]++;
+ }
+ if (!FieldEffectActiveListContains(FLDEFF_USE_FLY))
+ {
+ Overworld_ResetStateAfterFly();
+ WarpIntoMap();
+ SetMainCallback2(CB2_LoadMap);
+ gFieldCallback = FieldCallback_FlyArrive;
+ DestroyTask(taskId);
+ }
+}
+
+static void FieldCallback_FlyArrive(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ FadeInFromBlack();
+ CreateTask(Task_FlyIn, 0);
+ gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
+ {
+ ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], DIR_WEST);
+ }
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ gFieldCallback = NULL;
+}
+
+static void Task_FlyIn(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();
+ UnfreezeObjectEvents();
+ DestroyTask(taskId);
+ }
+}
+
+static void Task_FallWarpFieldEffect(u8 taskId);
+static bool8 FallWarpEffect_1(struct Task * task);
+static bool8 FallWarpEffect_2(struct Task * task);
+static bool8 FallWarpEffect_3(struct Task * task);
+static bool8 FallWarpEffect_4(struct Task * task);
+static bool8 FallWarpEffect_5(struct Task * task);
+static bool8 FallWarpEffect_6(struct Task * task);
+static bool8 FallWarpEffect_7(struct Task * task);
+
+static bool8 (*const sFallWarpEffectCBPtrs[])(struct Task * task) = {
+ FallWarpEffect_1,
+ FallWarpEffect_2,
+ FallWarpEffect_3,
+ FallWarpEffect_4,
+ FallWarpEffect_5,
+ FallWarpEffect_6,
+ FallWarpEffect_7
+};
+
+void FieldCB_FallWarpExit(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ WarpFadeInScreen();
+ sub_8111CF0();
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ CreateTask(Task_FallWarpFieldEffect, 0);
+ gFieldCallback = NULL;
+}
+
+static void Task_FallWarpFieldEffect(u8 taskId)
+{
+ struct Task * task = &gTasks[taskId];
+ while (sFallWarpEffectCBPtrs[task->data[0]](task))
+ ;
+}
+
+static bool8 FallWarpEffect_1(struct Task * task)
+{
+ struct ObjectEvent * playerObject;
+ struct Sprite * playerSprite;
+ playerObject = &gObjectEvents[gPlayerAvatar.objectEventId];
+ playerSprite = &gSprites[gPlayerAvatar.spriteId];
+ CameraObjectReset2();
+ gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
+ gPlayerAvatar.preventStep = TRUE;
+ ObjectEventSetHeldMovement(playerObject, GetFaceDirectionMovementAction(GetPlayerFacingDirection()));
+ task->data[4] = playerSprite->subspriteMode;
+ playerObject->fixedPriority = TRUE;
+ playerSprite->oam.priority = 1;
+ playerSprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
+ task->data[0]++;
+ return TRUE;
+}
+
+static bool8 FallWarpEffect_2(struct Task * task)
+{
+ if (IsWeatherNotFadingIn())
+ {
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+static bool8 FallWarpEffect_3(struct Task * task)
+{
+ 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;
+ gObjectEvents[gPlayerAvatar.objectEventId].invisible = FALSE;
+ PlaySE(SE_RU_HYUU);
+ task->data[0]++;
+ return FALSE;
+}
+
+static bool8 FallWarpEffect_4(struct Task * task)
+{
+ struct ObjectEvent * objectEvent;
+ struct Sprite * sprite;
+
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ 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]++;
+ objectEvent->fixedPriority = FALSE;
+ sprite->subspriteMode = task->data[4];
+ objectEvent->triggerGroundEffectsOnMove = TRUE;
+ }
+ if (sprite->pos2.y >= 0)
+ {
+ PlaySE(SE_W070);
+ objectEvent->triggerGroundEffectsOnStop = TRUE;
+ objectEvent->landingJump = TRUE;
+ sprite->pos2.y = 0;
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+static bool8 FallWarpEffect_5(struct Task * task)
+{
+ task->data[0]++;
+ task->data[1] = 4;
+ task->data[2] = 0;
+ SetCameraPanningCallback(NULL);
+ return TRUE;
+}
+
+static bool8 FallWarpEffect_6(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;
+}
+
+static bool8 FallWarpEffect_7(struct Task * task)
+{
+ s16 x, y;
+ gPlayerAvatar.preventStep = FALSE;
+ ScriptContext2_Disable();
+ CameraObjectReset1();
+ UnfreezeObjectEvents();
+ InstallCameraPanAheadCallback();
+ PlayerGetDestCoords(&x, &y);
+ // Seafoam Islands
+ if (sub_8055B38(MapGridGetMetatileBehaviorAt(x, y)) == TRUE)
+ {
+ VarSet(VAR_TEMP_1, 1);
+ SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_SURFING);
+ HelpSystem_SetSomeVariable2(22);
+ }
+ DestroyTask(FindTaskIdByFunc(Task_FallWarpFieldEffect));
+ return FALSE;
+}
+
+static void Task_EscalatorWarpFieldEffect(u8 taskId);
+static bool8 EscalatorWarpEffect_1(struct Task * task);
+static bool8 EscalatorWarpEffect_2(struct Task * task);
+static bool8 EscalatorWarpEffect_3(struct Task * task);
+static bool8 EscalatorWarpEffect_4(struct Task * task);
+static bool8 EscalatorWarpEffect_5(struct Task * task);
+static bool8 EscalatorWarpEffect_6(struct Task * task);
+static void Escalator_AnimatePlayerGoingDown(struct Task * task);
+static void Escalator_AnimatePlayerGoingUp(struct Task * task);
+static void Escalator_BeginFadeOutToNewMap(void);
+static void Escalator_TransitionToWarpInEffect(void);
+static void FieldCB_EscalatorWarpIn(void);
+static void Task_EscalatorWarpInFieldEffect(u8 taskId);
+static bool8 EscalatorWarpInEffect_1(struct Task * task);
+static bool8 EscalatorWarpInEffect_2(struct Task * task);
+static bool8 EscalatorWarpInEffect_3(struct Task * task);
+static bool8 EscalatorWarpInEffect_4(struct Task * task);
+static bool8 EscalatorWarpInEffect_5(struct Task * task);
+static bool8 EscalatorWarpInEffect_6(struct Task * task);
+static bool8 EscalatorWarpInEffect_7(struct Task * task);
+
+static bool8 (*const sEscalatorWarpFieldEffectFuncs[])(struct Task * task) = {
+ EscalatorWarpEffect_1,
+ EscalatorWarpEffect_2,
+ EscalatorWarpEffect_3,
+ EscalatorWarpEffect_4,
+ EscalatorWarpEffect_5,
+ EscalatorWarpEffect_6
+};
+
+void StartEscalatorWarp(u8 metatileBehavior, u8 priority)
+{
+ u8 taskId = CreateTask(Task_EscalatorWarpFieldEffect, priority);
+ gTasks[taskId].data[1] = 0;
+ if (metatileBehavior == MB_UP_ESCALATOR)
+ gTasks[taskId].data[1] = 1;
+}
+
+static void Task_EscalatorWarpFieldEffect(u8 taskId)
+{
+ struct Task * task = &gTasks[taskId];
+ while (sEscalatorWarpFieldEffectFuncs[task->data[0]](task))
+ ;
+}
+
+static bool8 EscalatorWarpEffect_1(struct Task * task)
+{
+ FreezeObjectEvents();
+ CameraObjectReset2();
+ StartEscalator(task->data[1]);
+ sub_81128BC(1);
+ task->data[0]++;
+ return FALSE;
+}
+
+static bool8 EscalatorWarpEffect_2(struct Task * task)
+{
+ struct ObjectEvent * objectEvent;
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(GetPlayerFacingDirection()));
+ 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;
+}
+
+static bool8 EscalatorWarpEffect_3(struct Task * task)
+{
+ Escalator_AnimatePlayerGoingDown(task);
+ if (task->data[2] > 3)
+ {
+ Escalator_BeginFadeOutToNewMap();
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+static bool8 EscalatorWarpEffect_4(struct Task * task)
+{
+ Escalator_AnimatePlayerGoingDown(task);
+ Escalator_TransitionToWarpInEffect();
+ return FALSE;
+}
+
+static bool8 EscalatorWarpEffect_5(struct Task * task)
+{
+ Escalator_AnimatePlayerGoingUp(task);
+ if (task->data[2] > 3)
+ {
+ Escalator_BeginFadeOutToNewMap();
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+static bool8 EscalatorWarpEffect_6(struct Task * task)
+{
+ Escalator_AnimatePlayerGoingUp(task);
+ Escalator_TransitionToWarpInEffect();
+ return FALSE;
+}
+
+
+static void Escalator_AnimatePlayerGoingDown(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]++;
+ }
+}
+
+static void Escalator_AnimatePlayerGoingUp(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]++;
+ }
+}
+
+static void Escalator_BeginFadeOutToNewMap(void)
+{
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
+}
+
+static void Escalator_TransitionToWarpInEffect(void)
+{
+ if (!gPaletteFade.active && BGMusicStopped() == TRUE)
+ {
+ StopEscalator();
+ WarpIntoMap();
+ gFieldCallback = FieldCB_EscalatorWarpIn;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpFieldEffect));
+ }
+}
+
+static bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task * task) = {
+ EscalatorWarpInEffect_1,
+ EscalatorWarpInEffect_2,
+ EscalatorWarpInEffect_3,
+ EscalatorWarpInEffect_4,
+ EscalatorWarpInEffect_5,
+ EscalatorWarpInEffect_6,
+ EscalatorWarpInEffect_7
+};
+
+static void FieldCB_EscalatorWarpIn(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ WarpFadeInScreen();
+ sub_8111CF0();
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ CreateTask(Task_EscalatorWarpInFieldEffect, 0);
+ gFieldCallback = NULL;
+}
+
+static void Task_EscalatorWarpInFieldEffect(u8 taskId)
+{
+ struct Task * task = &gTasks[taskId];
+ while (sEscalatorWarpInFieldEffectFuncs[task->data[0]](task))
+ ;
+}
+
+static bool8 EscalatorWarpInEffect_1(struct Task * task)
+{
+ struct ObjectEvent * objectEvent;
+ s16 x;
+ s16 y;
+ u8 behavior;
+ CameraObjectReset2();
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(DIR_EAST));
+ PlayerGetDestCoords(&x, &y);
+ behavior = MapGridGetMetatileBehaviorAt(x, y);
+ task->data[0]++;
+ task->data[1] = 16;
+ if (behavior == MB_DOWN_ESCALATOR)
+ {
+ behavior = 1;
+ task->data[0] = 3;
+ } else
+ {
+ behavior = 0;
+ }
+ StartEscalator(behavior);
+ return TRUE;
+}
+
+static bool8 EscalatorWarpInEffect_2(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;
+}
+
+static bool8 EscalatorWarpInEffect_3(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;
+}
+
+
+static bool8 EscalatorWarpInEffect_4(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;
+}
+
+static bool8 EscalatorWarpInEffect_5(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;
+}
+
+static bool8 EscalatorWarpInEffect_6(struct Task * task)
+{
+ if (IsEscalatorMoving())
+ {
+ return FALSE;
+ }
+ StopEscalator();
+ task->data[0]++;
+ return TRUE;
+}
+
+static bool8 EscalatorWarpInEffect_7(struct Task * task)
+{
+ struct ObjectEvent * objectEvent;
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ CameraObjectReset1();
+ ScriptContext2_Disable();
+ UnfreezeObjectEvents();
+ ObjectEventSetHeldMovement(objectEvent, GetWalkNormalMovementAction(DIR_EAST));
+ DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpInFieldEffect));
+ sub_81128BC(2);
+ }
+ return FALSE;
+}
+
+static void Task_UseWaterfall(u8 taskId);
+
+static bool8 waterfall_0_setup(struct Task * task, struct ObjectEvent * playerObj);
+static bool8 waterfall_1_do_anim_probably(struct Task * task, struct ObjectEvent * playerObj);
+static bool8 waterfall_2_wait_anim_finish_probably(struct Task * task, struct ObjectEvent * playerObj);
+static bool8 waterfall_3_move_player_probably(struct Task * task, struct ObjectEvent * playerObj);
+static bool8 waterfall_4_wait_player_move_probably(struct Task * task, struct ObjectEvent * playerObj);
+
+static bool8 (*const sUseWaterfallFieldEffectFuncs[])(struct Task * task, struct ObjectEvent * playerObj) = {
+ waterfall_0_setup,
+ waterfall_1_do_anim_probably,
+ waterfall_2_wait_anim_finish_probably,
+ waterfall_3_move_player_probably,
+ waterfall_4_wait_player_move_probably
+};
+
+u32 FldEff_UseWaterfall(void)
+{
+ u8 taskId = CreateTask(Task_UseWaterfall, 0xFF);
+ gTasks[taskId].data[1] = gFieldEffectArguments[0];
+ Task_UseWaterfall(taskId);
+ return 0;
+}
+
+static void Task_UseWaterfall(u8 taskId)
+{
+ while (sUseWaterfallFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId]))
+ ;
+}
+
+static bool8 waterfall_0_setup(struct Task * task, struct ObjectEvent * playerObj)
+{
+ ScriptContext2_Enable();
+ gPlayerAvatar.preventStep = TRUE;
+ task->data[0]++;
+ return FALSE;
+}
+
+static bool8 waterfall_1_do_anim_probably(struct Task * task, struct ObjectEvent * playerObj)
+{
+ ScriptContext2_Enable();
+ if (!ObjectEventIsMovementOverridden(playerObj))
+ {
+ ObjectEventClearHeldMovementIfFinished(playerObj);
+ gFieldEffectArguments[0] = task->data[1];
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+static bool8 waterfall_2_wait_anim_finish_probably(struct Task * task, struct ObjectEvent * playerObj)
+{
+ if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ return FALSE;
+ task->data[0]++;
+ return TRUE;
+}
+
+static bool8 waterfall_3_move_player_probably(struct Task * task, struct ObjectEvent * playerObj)
+{
+ ObjectEventSetHeldMovement(playerObj, sub_8063F2C(DIR_NORTH));
+ task->data[0]++;
+ return FALSE;
+}
+
+static bool8 waterfall_4_wait_player_move_probably(struct Task * task, struct ObjectEvent * playerObj)
+{
+ if (!ObjectEventClearHeldMovementIfFinished(playerObj))
+ return FALSE;
+ if (MetatileBehavior_IsWaterfall(playerObj->mapobj_unk_1E))
+ {
+ task->data[0] = 3;
+ return TRUE;
+ }
+ ScriptContext2_Disable();
+ gPlayerAvatar.preventStep = FALSE;
+ DestroyTask(FindTaskIdByFunc(Task_UseWaterfall));
+ FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL);
+ return FALSE;
+}
+
+static void Task_Dive(u8 taskId);
+static bool8 dive_1_lock(struct Task * task);
+static bool8 dive_2_unknown(struct Task * task);
+static bool8 dive_3_unknown(struct Task * task);
+
+static bool8 (*const sDiveFieldEffectFuncPtrs[])(struct Task * task) = {
+ dive_1_lock,
+ dive_2_unknown,
+ dive_3_unknown
+};
+
+u32 FldEff_UseDive(void)
+{
+ u8 taskId = CreateTask(Task_Dive, 0xFF);
+ gTasks[taskId].data[15] = gFieldEffectArguments[0];
+ gTasks[taskId].data[14] = gFieldEffectArguments[1];
+ Task_Dive(taskId);
+ return 0;
+}
+
+static void Task_Dive(u8 taskId)
+{
+ while (sDiveFieldEffectFuncPtrs[gTasks[taskId].data[0]](&gTasks[taskId]))
+ ;
+}
+
+static bool8 dive_1_lock(struct Task * task)
+{
+ gPlayerAvatar.preventStep = TRUE;
+ task->data[0]++;
+ return FALSE;
+}
+
+static bool8 dive_2_unknown(struct Task * task)
+{
+ ScriptContext2_Enable();
+ gFieldEffectArguments[0] = task->data[15];
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ task->data[0]++;
+ return FALSE;
+}
+
+static bool8 dive_3_unknown(struct Task * task)
+{
+ struct MapPosition pos;
+ PlayerGetDestCoords(&pos.x, &pos.y);
+ if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ {
+ dive_warp(&pos, gObjectEvents[gPlayerAvatar.objectEventId].mapobj_unk_1E);
+ DestroyTask(FindTaskIdByFunc(Task_Dive));
+ FieldEffectActiveListRemove(FLDEFF_USE_DIVE);
+ }
+ return FALSE;
+}
+
+static void Task_LavaridgeGymB1FWarp(u8 taskId);
+static bool8 LavaridgeGymB1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static bool8 LavaridgeGymB1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static bool8 LavaridgeGymB1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static bool8 LavaridgeGymB1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static bool8 LavaridgeGymB1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static void FieldCB_LavaridgeGymB1FWarpExit(void);
+static void Task_LavaridgeGymB1FWarpExit(u8 taskId);
+static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+
+static bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = {
+ LavaridgeGymB1FWarpEffect_1,
+ LavaridgeGymB1FWarpEffect_2,
+ LavaridgeGymB1FWarpEffect_3,
+ LavaridgeGymB1FWarpEffect_4,
+ LavaridgeGymB1FWarpEffect_5,
+ LavaridgeGymB1FWarpEffect_6
+};
+
+void StartLavaridgeGymB1FWarp(u8 priority)
+{
+ CreateTask(Task_LavaridgeGymB1FWarp, priority);
+}
+
+static void Task_LavaridgeGymB1FWarp(u8 taskId)
+{
+ while (sLavaridgeGymB1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId]));
+}
+
+static bool8 LavaridgeGymB1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ FreezeObjectEvents();
+ CameraObjectReset2();
+ SetCameraPanningCallback(NULL);
+ gPlayerAvatar.preventStep = TRUE;
+ objectEvent->fixedPriority = TRUE;
+ task->data[1] = 1;
+ task->data[0]++;
+ return TRUE;
+}
+
+static bool8 LavaridgeGymB1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, 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;
+}
+
+static bool8 LavaridgeGymB1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ sprite->pos2.y = 0;
+ task->data[3] = 1;
+ gFieldEffectArguments[0] = objectEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objectEvent->currentCoords.y;
+ gFieldEffectArguments[2] = sprite->subpriority - 1;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP);
+ PlaySE(SE_W153);
+ task->data[0]++;
+ return TRUE;
+}
+
+static bool8 LavaridgeGymB1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, 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]++;
+ objectEvent->fixedPriority = TRUE;
+ sprite->oam.priority = 1;
+ sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
+ }
+ if (task->data[1] == 0 && task->data[4] != 0)
+ {
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+static bool8 LavaridgeGymB1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
+ task->data[0]++;
+ return FALSE;
+}
+
+static bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ if (!gPaletteFade.active && BGMusicStopped() == TRUE)
+ {
+ WarpIntoMap();
+ gFieldCallback = FieldCB_LavaridgeGymB1FWarpExit;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(Task_LavaridgeGymB1FWarp));
+ }
+ return FALSE;
+}
+
+static bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = {
+ LavaridgeGymB1FWarpExitEffect_1,
+ LavaridgeGymB1FWarpExitEffect_2,
+ LavaridgeGymB1FWarpExitEffect_3,
+ LavaridgeGymB1FWarpExitEffect_4
+};
+
+static void FieldCB_LavaridgeGymB1FWarpExit(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ WarpFadeInScreen();
+ sub_8111CF0();
+ ScriptContext2_Enable();
+ gFieldCallback = NULL;
+ CreateTask(Task_LavaridgeGymB1FWarpExit, 0);
+}
+
+static void Task_LavaridgeGymB1FWarpExit(u8 taskId)
+{
+ while (sLavaridgeGymB1FWarpExitEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId]));
+}
+
+static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ CameraObjectReset2();
+ FreezeObjectEvents();
+ gPlayerAvatar.preventStep = TRUE;
+ objectEvent->invisible = TRUE;
+ task->data[0]++;
+ return FALSE;
+}
+
+static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ if (IsWeatherNotFadingIn())
+ {
+ gFieldEffectArguments[0] = objectEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objectEvent->currentCoords.y;
+ gFieldEffectArguments[2] = sprite->subpriority - 1;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH);
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ sprite = &gSprites[task->data[1]];
+ if (sprite->animCmdIndex > 1)
+ {
+ task->data[0]++;
+ objectEvent->invisible = FALSE;
+ CameraObjectReset1();
+ PlaySE(SE_W091);
+ ObjectEventSetHeldMovement(objectEvent, sub_8064194(DIR_EAST));
+ }
+ return FALSE;
+}
+
+static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ if (ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ gPlayerAvatar.preventStep = FALSE;
+ ScriptContext2_Disable();
+ UnfreezeObjectEvents();
+ DestroyTask(FindTaskIdByFunc(Task_LavaridgeGymB1FWarpExit));
+ }
+ return FALSE;
+}
+
+static void Task_LavaridgeGym1FWarp(u8 taskId);
+static bool8 LavaridgeGym1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static bool8 LavaridgeGym1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static bool8 LavaridgeGym1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static bool8 LavaridgeGym1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static bool8 LavaridgeGym1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite);
+
+static bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = {
+ LavaridgeGym1FWarpEffect_1,
+ LavaridgeGym1FWarpEffect_2,
+ LavaridgeGym1FWarpEffect_3,
+ LavaridgeGym1FWarpEffect_4,
+ LavaridgeGym1FWarpEffect_5
+};
+
+// For the ash puff effect when warping off the B1F ash tiles
+u8 FldEff_LavaridgeGymWarp(void)
+{
+ u8 spriteId;
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ return spriteId;
+}
+
+void SpriteCB_LavaridgeGymWarp(struct Sprite * sprite)
+{
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, FLDEFF_LAVARIDGE_GYM_WARP);
+ }
+}
+
+void StartLavaridgeGym1FWarp(u8 priority)
+{
+ CreateTask(Task_LavaridgeGym1FWarp, priority);
+}
+
+static void Task_LavaridgeGym1FWarp(u8 taskId)
+{
+ while(sLavaridgeGym1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId]));
+}
+
+static bool8 LavaridgeGym1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ FreezeObjectEvents();
+ CameraObjectReset2();
+ gPlayerAvatar.preventStep = TRUE;
+ objectEvent->fixedPriority = TRUE;
+ task->data[0]++;
+ return FALSE;
+}
+
+static bool8 LavaridgeGym1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ if (ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ if (task->data[1] > 3)
+ {
+ gFieldEffectArguments[0] = objectEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objectEvent->currentCoords.y;
+ gFieldEffectArguments[2] = sprite->subpriority - 1;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH);
+ task->data[0]++;
+ } else
+ {
+ task->data[1]++;
+ ObjectEventSetHeldMovement(objectEvent, GetStepInPlaceDelay4AnimId(objectEvent->facingDirection));
+ PlaySE(SE_FU_ZUZUZU);
+ }
+ }
+ return FALSE;
+}
+
+static bool8 LavaridgeGym1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ if (gSprites[task->data[1]].animCmdIndex == 2)
+ {
+ objectEvent->invisible = TRUE;
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+static bool8 LavaridgeGym1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
+ {
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+static bool8 LavaridgeGym1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ if (!gPaletteFade.active && BGMusicStopped() == TRUE)
+ {
+ WarpIntoMap();
+ gFieldCallback = FieldCB_FallWarpExit;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(Task_LavaridgeGym1FWarp));
+ }
+ return FALSE;
+}
+
+u8 FldEff_PopOutOfAsh(void)
+{
+ u8 spriteId;
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ return spriteId;
+}
+
+void SpriteCB_PopOutOfAsh(struct Sprite * sprite)
+{
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, FLDEFF_POP_OUT_OF_ASH);
+ }
+}
+
+static void Task_DoEscapeRopeFieldEffect(u8 taskId);
+static void EscapeRopeFieldEffect_Step0(struct Task * task);
+static void EscapeRopeFieldEffect_Step1(struct Task * task);
+static u8 sub_808576C(struct ObjectEvent * playerObj, s16 *a1p, s16 *a2p);
+static bool32 sub_80857F0(struct ObjectEvent * playerObj, s16 *a1p, s16 *a2p);
+static void FieldCallback_EscapeRopeExit(void);
+static void Task_DoEscapeRopeExitFieldEffect(u8 taskId);
+static void EscapeRopeExitFieldEffect_Step0(struct Task * task);
+static void EscapeRopeExitFieldEffect_Step1(struct Task * task);
+
+static void (*const gEscapeRopeFieldEffectFuncs[])(struct Task * task) = {
+ EscapeRopeFieldEffect_Step0,
+ EscapeRopeFieldEffect_Step1
+};
+
+void StartEscapeRopeFieldEffect(void)
+{
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ CreateTask(Task_DoEscapeRopeFieldEffect, 80);
+}
+
+static void Task_DoEscapeRopeFieldEffect(u8 taskId)
+{
+ gEscapeRopeFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+static void EscapeRopeFieldEffect_Step0(struct Task * task)
+{
+ task->data[0]++;
+ task->data[13] = 64;
+ task->data[14] = GetPlayerFacingDirection();
+ task->data[15] = 0;
+}
+
+static void EscapeRopeFieldEffect_Step1(struct Task * task)
+{
+ struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId];
+ s16 *data = task->data;
+ sub_808576C(playerObj, &task->data[1], &task->data[2]);
+ if (data[3] < 60)
+ {
+ data[3]++;
+ if (data[3] == 20)
+ {
+ PlaySE(SE_TK_WARPIN);
+ }
+ }
+ else if (data[4] == 0 && !sub_80857F0(playerObj, &task->data[5], &task->data[6]))
+ {
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
+ data[4] = 1;
+ }
+ if (data[4] == 1 && !gPaletteFade.active && BGMusicStopped() == TRUE)
+ {
+ ObjectEventSetDirection(playerObj, task->data[15]);
+ sub_80555E0();
+ WarpIntoMap();
+ gFieldCallback = FieldCallback_EscapeRopeExit;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(Task_DoEscapeRopeFieldEffect));
+ }
+}
+
+static const u8 sUnknown_83CC0E8[] = {
+ [DIR_NONE] = DIR_SOUTH,
+ [DIR_SOUTH] = DIR_WEST,
+ [DIR_WEST] = DIR_NORTH,
+ [DIR_NORTH] = DIR_EAST,
+ [DIR_EAST] = DIR_SOUTH,
+};
+
+static u8 sub_808576C(struct ObjectEvent * playerObj, s16 *delay_p, s16 *stage_p)
+{
+ if (!ObjectEventIsMovementOverridden(playerObj) || ObjectEventClearHeldMovementIfFinished(playerObj))
+ {
+ if (*delay_p != 0 && --(*delay_p) != 0)
+ return playerObj->facingDirection;
+ ObjectEventSetHeldMovement(playerObj, GetFaceDirectionMovementAction(sUnknown_83CC0E8[playerObj->facingDirection]));
+ if (*stage_p < 12)
+ (*stage_p)++;
+ *delay_p = 12 >> (*stage_p); // 12 >> 4 = 0
+ return sUnknown_83CC0E8[playerObj->facingDirection];
+ }
+ return playerObj->facingDirection;
+}
+
+static bool32 sub_80857F0(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p)
+{
+ struct Sprite * sprite = &gSprites[playerObj->spriteId];
+ switch (*state_p)
+ {
+ case 0:
+ CameraObjectReset2();
+ (*state_p)++;
+ // fallthrough
+ case 1:
+ sprite->pos2.y -= 8;
+ (*y_p) -= 8;
+ if (*y_p <= -16)
+ {
+ playerObj->fixedPriority = TRUE;
+ sprite->oam.priority = 1;
+ sprite->subpriority = 0;
+ sprite->subspriteMode = SUBSPRITES_OFF;
+ (*state_p)++;
+ }
+ break;
+ case 2:
+ sprite->pos2.y -= 8;
+ (*y_p) -= 8;
+ if (*y_p <= -88)
+ {
+ (*state_p)++;
+ return FALSE;
+ }
+ break;
+ case 3:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void (*const sEscapeRopeExitEffectFuncs[])(struct Task * task) = {
+ EscapeRopeExitFieldEffect_Step0,
+ EscapeRopeExitFieldEffect_Step1
+};
+
+static bool32 sub_80858A4(struct ObjectEvent * playerObj, s16 *state_p, s16 *y_p, s16 *priority_p, s16 *subpriority_p, s16 *subspriteMode_p)
+{
+ struct Sprite * sprite = &gSprites[playerObj->spriteId];
+ switch (*state_p)
+ {
+ case 0:
+ CameraObjectReset2();
+ *y_p = -88;
+ sprite->pos2.y -= 88;
+ *priority_p = sprite->oam.priority;
+ *subpriority_p = sprite->subpriority;
+ *subspriteMode_p = sprite->subspriteMode;
+ playerObj->fixedPriority = TRUE;
+ sprite->oam.priority = 1;
+ sprite->subpriority = 0;
+ sprite->subspriteMode = SUBSPRITES_OFF;
+ (*state_p)++;
+ // fallthrough
+ case 1:
+ sprite->pos2.y += 4;
+ (*y_p) += 4;
+ if (*y_p >= -16)
+ {
+ sprite->oam.priority = *priority_p;
+ sprite->subpriority = *subpriority_p;
+ sprite->subspriteMode = *subspriteMode_p;
+ (*state_p)++;
+ }
+ break;
+ case 2:
+ sprite->pos2.y += 4;
+ (*y_p) += 4;
+ if (*y_p >= 0)
+ {
+ PlaySE(SE_TK_KASYA);
+ CameraObjectReset1();
+ (*state_p)++;
+ return FALSE;
+ }
+ break;
+ case 3:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void FieldCallback_EscapeRopeExit(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ WarpFadeInScreen();
+ sub_8111CF0();
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ gFieldCallback = NULL;
+ gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
+ CreateTask(Task_DoEscapeRopeExitFieldEffect, 0);
+}
+
+static void Task_DoEscapeRopeExitFieldEffect(u8 taskId)
+{
+ sEscapeRopeExitEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+static void EscapeRopeExitFieldEffect_Step0(struct Task * task)
+{
+ if (IsWeatherNotFadingIn())
+ {
+ PlaySE(SE_TK_WARPOUT);
+ task->data[15] = GetPlayerFacingDirection();
+ task->data[0]++;
+ }
+}
+
+static void EscapeRopeExitFieldEffect_Step1(struct Task * task)
+{
+ s16 *data = task->data;
+ struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId];
+ bool32 finished = sub_80858A4(playerObj, &data[1], &data[2], &data[3], &data[4], &data[5]);
+ playerObj->invisible = FALSE;
+ if (data[6] < 8)
+ data[6]++;
+ else if (data[7] == 0)
+ {
+ data[6]++;
+ data[8] = sub_808576C(playerObj, &data[9], &data[10]);
+ if (data[6] >= 50 && data[8] == data[15])
+ data[7] = 1;
+ }
+ if (!finished && data[8] == data[15] && ObjectEventCheckHeldMovementStatus(playerObj) == TRUE)
+ {
+ playerObj->invisible = FALSE;
+ playerObj->fixedPriority = FALSE;
+ ScriptContext2_Disable();
+ UnfreezeObjectEvents();
+ DestroyTask(FindTaskIdByFunc(Task_DoEscapeRopeExitFieldEffect));
+ }
+}
+
+static void Task_DoTeleportFieldEffect(u8 taskId);
+static void TeleportFieldEffectTask1(struct Task * task);
+static void TeleportFieldEffectTask2(struct Task * task);
+static void TeleportFieldEffectTask3(struct Task * task);
+static void TeleportFieldEffectTask4(struct Task * task);
+static void FieldCallback_TeleportIn(void);
+static void Task_DoTeleportInFieldEffect(u8 taskId);
+static void TeleportInFieldEffectTask1(struct Task * task);
+static void TeleportInFieldEffectTask2(struct Task * task);
+static void TeleportInFieldEffectTask3(struct Task * task);
+
+static void (*const sTeleportEffectFuncs[])(struct Task * ) = {
+ TeleportFieldEffectTask1,
+ TeleportFieldEffectTask2,
+ TeleportFieldEffectTask3,
+ TeleportFieldEffectTask4
+};
+
+void CreateTeleportFieldEffectTask(void)
+{
+ CreateTask(Task_DoTeleportFieldEffect, 0);
+}
+
+static void Task_DoTeleportFieldEffect(u8 taskId)
+{
+ sTeleportEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+static void TeleportFieldEffectTask1(struct Task * task)
+{
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ CameraObjectReset2();
+ task->data[15] = GetPlayerFacingDirection();
+ task->data[0]++;
+}
+
+static void TeleportFieldEffectTask2(struct Task * task)
+{
+ u8 spinDirections[5] = {
+ [DIR_NONE] = DIR_SOUTH,
+ [DIR_SOUTH] = DIR_WEST,
+ [DIR_WEST] = DIR_NORTH,
+ [DIR_NORTH] = DIR_EAST,
+ [DIR_EAST] = DIR_SOUTH
+ };
+ struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (task->data[1] == 0 || (--task->data[1]) == 0)
+ {
+ ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]);
+ task->data[1] = 8;
+ task->data[2]++;
+ }
+ if (task->data[2] > 7 && task->data[15] == objectEvent->facingDirection)
+ {
+ task->data[0]++;
+ task->data[1] = 4;
+ task->data[2] = 8;
+ task->data[3] = 1;
+ PlaySE(SE_TK_WARPIN);
+ }
+}
+
+static void TeleportFieldEffectTask3(struct Task * task)
+{
+ u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
+ struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ struct Sprite * sprite = &gSprites[gPlayerAvatar.spriteId];
+ if ((--task->data[1]) <= 0)
+ {
+ task->data[1] = 4;
+ ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]);
+ }
+ 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 != SUBSPRITES_OFF))
+ {
+ sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
+ }
+ if (task->data[4] >= 0xa8)
+ {
+ task->data[0]++;
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
+ }
+}
+
+static void TeleportFieldEffectTask4(struct Task * task)
+{
+ if (!gPaletteFade.active)
+ {
+ if (BGMusicStopped() == TRUE)
+ {
+ copy_saved_warp3_bank_and_enter_x_to_warp1();
+ WarpIntoMap();
+ SetMainCallback2(CB2_LoadMap);
+ gFieldCallback = FieldCallback_TeleportIn;
+ DestroyTask(FindTaskIdByFunc(Task_DoTeleportFieldEffect));
+ }
+ }
+}
+
+static void (*const sTeleportInEffectFuncs[])(struct Task * ) = {
+ TeleportInFieldEffectTask1,
+ TeleportInFieldEffectTask2,
+ TeleportInFieldEffectTask3
+};
+
+static void FieldCallback_TeleportIn(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ WarpFadeInScreen();
+ sub_8111CF0();
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ gFieldCallback = NULL;
+ gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
+ CameraObjectReset2();
+ CreateTask(Task_DoTeleportInFieldEffect, 0);
+}
+
+static void Task_DoTeleportInFieldEffect(u8 taskId)
+{
+ sTeleportInEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+static void TeleportInFieldEffectTask1(struct Task * task)
+{
+ struct Sprite * sprite;
+ s16 centerToCornerVecY;
+ if (IsWeatherNotFadingIn())
+ {
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
+ sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY);
+ gObjectEvents[gPlayerAvatar.objectEventId].invisible = FALSE;
+ task->data[0]++;
+ task->data[1] = 8;
+ task->data[2] = 1;
+ task->data[14] = sprite->subspriteMode;
+ task->data[15] = GetPlayerFacingDirection();
+ PlaySE(SE_TK_WARPIN);
+ }
+}
+
+static void TeleportInFieldEffectTask2(struct Task * task)
+{
+ u8 spinDirections[5] = {1, 3, 4, 2, 1};
+ struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ struct Sprite * sprite = &gSprites[gPlayerAvatar.spriteId];
+ if ((sprite->pos2.y += task->data[1]) >= -8)
+ {
+ if (task->data[13] == 0)
+ {
+ task->data[13]++;
+ objectEvent->triggerGroundEffectsOnMove = TRUE;
+ sprite->subspriteMode = task->data[14];
+ }
+ } else
+ {
+ sprite->oam.priority = 1;
+ if (sprite->subspriteMode != SUBSPRITES_OFF)
+ {
+ sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
+ }
+ }
+ 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;
+ ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]);
+ }
+ if (sprite->pos2.y >= 0)
+ {
+ sprite->pos2.y = 0;
+ task->data[0]++;
+ task->data[1] = 1;
+ task->data[2] = 0;
+ }
+}
+
+static void TeleportInFieldEffectTask3(struct Task * task)
+{
+ u8 spinDirections[5] = {1, 3, 4, 2, 1};
+ struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if ((--task->data[1]) == 0)
+ {
+ ObjectEventTurn(objectEvent, spinDirections[objectEvent->facingDirection]);
+ task->data[1] = 8;
+ if ((++task->data[2]) > 4 && task->data[14] == objectEvent->facingDirection)
+ {
+ ScriptContext2_Disable();
+ CameraObjectReset1();
+ UnfreezeObjectEvents();
+ DestroyTask(FindTaskIdByFunc(Task_DoTeleportInFieldEffect));
+ }
+ }
+}
+
+static void Task_ShowMon_Outdoors(u8 taskId);
+static void ShowMonEffect_Outdoors_1(struct Task * task);
+static void ShowMonEffect_Outdoors_2(struct Task * task);
+static void ShowMonEffect_Outdoors_3(struct Task * task);
+static void ShowMonEffect_Outdoors_4(struct Task * task);
+static void ShowMonEffect_Outdoors_5(struct Task * task);
+static void ShowMonEffect_Outdoors_6(struct Task * task);
+static void ShowMonEffect_Outdoors_7(struct Task * task);
+static void VBlankCB_ShowMonEffect_Outdoors(void);
+static void LoadFieldMoveStreaksTilemapToVram(u16 screenbase);
+static void Task_ShowMon_Indoors(u8 taskId);
+static void ShowMonEffect_Indoors_1(struct Task * task);
+static void ShowMonEffect_Indoors_2(struct Task * task);
+static void ShowMonEffect_Indoors_3(struct Task * task);
+static void ShowMonEffect_Indoors_4(struct Task * task);
+static void ShowMonEffect_Indoors_5(struct Task * task);
+static void ShowMonEffect_Indoors_6(struct Task * task);
+static void ShowMonEffect_Indoors_7(struct Task * task);
+static void VBlankCB_ShowMonEffect_Indoors(void);
+static void sub_8086728(struct Task * task);
+static bool8 sub_8086738(struct Task * task);
+static bool8 sub_80867F0(struct Task * task);
+static u8 sub_8086860(u32 species, u32 otId, u32 personality);
+static void sub_80868C0(struct Sprite * sprite);
+static void sub_8086904(struct Sprite * sprite);
+static void sub_8086920(struct Sprite * sprite);
+
+static void (*const sShowMonOutdoorsEffectFuncs[])(struct Task * task) = {
+ ShowMonEffect_Outdoors_1,
+ ShowMonEffect_Outdoors_2,
+ ShowMonEffect_Outdoors_3,
+ ShowMonEffect_Outdoors_4,
+ ShowMonEffect_Outdoors_5,
+ ShowMonEffect_Outdoors_6,
+ ShowMonEffect_Outdoors_7
+};
+
+u32 FldEff_FieldMoveShowMon(void)
+{
+ u8 taskId;
+ if (IsMapTypeOutdoors(GetCurrentMapType()) == TRUE)
+ taskId = CreateTask(Task_ShowMon_Outdoors, 0xFF);
+ else
+ taskId = CreateTask(Task_ShowMon_Indoors, 0xFF);
+ gTasks[taskId].data[15] = sub_8086860(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ return 0;
+}
+
+u32 FldEff_FieldMoveShowMonInit(void)
+{
+ u32 r6 = gFieldEffectArguments[0] & 0x80000000;
+ u8 partyIdx = gFieldEffectArguments[0];
+ gFieldEffectArguments[0] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_SPECIES);
+ gFieldEffectArguments[1] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_OT_ID);
+ gFieldEffectArguments[2] = GetMonData(&gPlayerParty[partyIdx], MON_DATA_PERSONALITY);
+ gFieldEffectArguments[0] |= r6;
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON);
+ FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ return 0;
+}
+
+static void Task_ShowMon_Outdoors(u8 taskId)
+{
+ sShowMonOutdoorsEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+static void ShowMonEffect_Outdoors_1(struct Task * task)
+{
+ task->data[11] = GetGpuReg(REG_OFFSET_WININ);
+ task->data[12] = GetGpuReg(REG_OFFSET_WINOUT);
+ StoreWordInTwoHalfwords((u16*)&task->data[13], (u32)gMain.vblankCallback);
+ task->data[1] = WIN_RANGE(0xF0, 0xF1);
+ task->data[2] = WIN_RANGE(0x50, 0x51);
+ task->data[3] = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR;
+ task->data[4] = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR;
+ SetGpuReg(REG_OFFSET_WIN0H, task->data[1]);
+ SetGpuReg(REG_OFFSET_WIN0V, task->data[2]);
+ SetGpuReg(REG_OFFSET_WININ, task->data[3]);
+ SetGpuReg(REG_OFFSET_WINOUT, task->data[4]);
+ SetVBlankCallback(VBlankCB_ShowMonEffect_Outdoors);
+ task->data[0]++;
+}
+
+static void ShowMonEffect_Outdoors_2(struct Task * task)
+{
+ u16 charbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 2) << 14);
+ u16 screenbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11);
+ CpuCopy16(sFieldMoveStreaksTiles, (void *)(VRAM + charbase), 0x200);
+ CpuFill32(0, (void *)(VRAM + screenbase), 0x800);
+ LoadPalette(sFieldMoveStreaksPalette, 0xf0, 0x20);
+ LoadFieldMoveStreaksTilemapToVram(screenbase);
+ task->data[0]++;
+}
+
+static void ShowMonEffect_Outdoors_3(struct Task * task)
+{
+ s16 win0h_lo;
+ s16 win0v_lo;
+ s16 win0v_hi;
+ task->data[5] -= 16;
+ win0h_lo = ((u16)task->data[1] >> 8);
+ win0v_lo = ((u16)task->data[2] >> 8);
+ win0v_hi = ((u16)task->data[2] & 0xff);
+ win0h_lo -= 16;
+ win0v_lo -= 2;
+ win0v_hi += 2;
+ if (win0h_lo < 0)
+ {
+ win0h_lo = 0;
+ }
+ if (win0v_lo < 0x28)
+ {
+ win0v_lo = 0x28;
+ }
+ if (win0v_hi > 0x78)
+ {
+ win0v_hi = 0x78;
+ }
+ task->data[1] = WIN_RANGE(win0h_lo, task->data[1] & 0xff);
+ task->data[2] = WIN_RANGE(win0v_lo, win0v_hi);
+ if (win0h_lo == 0 && win0v_lo == 0x28 && win0v_hi == 0x78)
+ {
+ gSprites[task->data[15]].callback = sub_80868C0;
+ task->data[0]++;
+ }
+}
+
+static void ShowMonEffect_Outdoors_4(struct Task * task)
+{
+ task->data[5] -= 16;
+ if (gSprites[task->data[15]].data[7])
+ {
+ task->data[0]++;
+ }
+}
+
+static void ShowMonEffect_Outdoors_5(struct Task * task)
+{
+ s16 win0v_lo;
+ s16 win0v_hi;
+ task->data[5] -= 16;
+ win0v_lo = (task->data[2] >> 8);
+ win0v_hi = (task->data[2] & 0xff);
+ win0v_lo += 6;
+ win0v_hi -= 6;
+ if (win0v_lo > 0x50)
+ {
+ win0v_lo = 0x50;
+ }
+ if (win0v_hi < 0x51)
+ {
+ win0v_hi = 0x51;
+ }
+ task->data[2] = WIN_RANGE(win0v_lo, win0v_hi);
+ if (win0v_lo == 0x50 && win0v_hi == 0x51)
+ {
+ task->data[0]++;
+ }
+}
+
+static void ShowMonEffect_Outdoors_6(struct Task * task)
+{
+ u16 bg0cnt = (GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11;
+ CpuFill32(0, (void *)VRAM + bg0cnt, 0x800);
+ task->data[1] = WIN_RANGE(0x00, 0xf1);
+ task->data[2] = WIN_RANGE(0x00, 0xa1);
+ task->data[3] = task->data[11];
+ task->data[4] = task->data[12];
+ task->data[0]++;
+}
+
+static void ShowMonEffect_Outdoors_7(struct Task * task)
+{
+ IntrCallback callback;
+ LoadWordFromTwoHalfwords((u16 *)&task->data[13], (uintptr_t *)&callback);
+ SetVBlankCallback(callback);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ Menu_LoadStdPal();
+ FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]);
+ FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON);
+ DestroyTask(FindTaskIdByFunc(Task_ShowMon_Outdoors));
+}
+
+static void VBlankCB_ShowMonEffect_Outdoors(void)
+{
+ IntrCallback callback;
+ struct Task * task = &gTasks[FindTaskIdByFunc(Task_ShowMon_Outdoors)];
+ LoadWordFromTwoHalfwords((u16 *)&task->data[13], (uintptr_t *)&callback);
+ callback();
+ SetGpuReg(REG_OFFSET_WIN0H, task->data[1]);
+ SetGpuReg(REG_OFFSET_WIN0V, task->data[2]);
+ SetGpuReg(REG_OFFSET_WININ, task->data[3]);
+ SetGpuReg(REG_OFFSET_WINOUT, task->data[4]);
+ SetGpuReg(REG_OFFSET_BG0HOFS, task->data[5]);
+ SetGpuReg(REG_OFFSET_BG0VOFS, task->data[6]);
+}
+
+static void LoadFieldMoveStreaksTilemapToVram(u16 screenbase)
+{
+ u16 i;
+ u16 *dest;
+ dest = (u16 *)(VRAM + (10 * 32) + screenbase);
+ for (i = 0; i < (10 * 32); i++, dest++)
+ {
+ *dest = sFieldMoveStreaksTilemap[i] | METATILE_ELEVATION_MASK;
+ }
+}
+
+static void (*const sShowMonIndoorsEffectFuncs[])(struct Task * ) = {
+ ShowMonEffect_Indoors_1,
+ ShowMonEffect_Indoors_2,
+ ShowMonEffect_Indoors_3,
+ ShowMonEffect_Indoors_4,
+ ShowMonEffect_Indoors_5,
+ ShowMonEffect_Indoors_6,
+ ShowMonEffect_Indoors_7
+};
+
+static void Task_ShowMon_Indoors(u8 taskId)
+{
+ sShowMonIndoorsEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+static void ShowMonEffect_Indoors_1(struct Task * task)
+{
+ SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]);
+ SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]);
+ StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback);
+ SetVBlankCallback(VBlankCB_ShowMonEffect_Indoors);
+ task->data[0]++;
+}
+
+static void ShowMonEffect_Indoors_2(struct Task * task)
+{
+ u16 charbase;
+ u16 screenbase;
+ charbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 2) << 14);
+ screenbase = ((GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11);
+ task->data[12] = screenbase;
+ CpuCopy16(sDarknessFieldMoveStreaksTiles, (void *)(VRAM + charbase), 0x80);
+ CpuFill32(0, (void *)(VRAM + screenbase), 0x800);
+ LoadPalette(sDarknessFieldMoveStreaksPalette, 0xf0, 0x20);
+ task->data[0]++;
+}
+
+static void ShowMonEffect_Indoors_3(struct Task * task)
+{
+ if (sub_8086738(task))
+ {
+ task->data[5] = GetGpuReg(REG_OFFSET_WININ);
+ SetGpuReg(REG_OFFSET_WININ, (task->data[5] & 0xFF) | WININ_WIN1_BG0 | WININ_WIN1_OBJ);
+ SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0x00, 0xf0));
+ SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(0x28, 0x78));
+ gSprites[task->data[15]].callback = sub_80868C0;
+ task->data[0]++;
+ }
+ sub_8086728(task);
+}
+
+static void ShowMonEffect_Indoors_4(struct Task * task)
+{
+ sub_8086728(task);
+ if (gSprites[task->data[15]].data[7])
+ {
+ task->data[0]++;
+ }
+}
+
+static void ShowMonEffect_Indoors_5(struct Task * task)
+{
+ sub_8086728(task);
+ task->data[3] = task->data[1] & 7;
+ task->data[4] = 0;
+ SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0xff, 0xff));
+ SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(0xff, 0xff));
+ SetGpuReg(REG_OFFSET_WININ, task->data[5]);
+ task->data[0]++;
+}
+
+static void ShowMonEffect_Indoors_6(struct Task * task)
+{
+ sub_8086728(task);
+ if (sub_80867F0(task))
+ {
+ task->data[0]++;
+ }
+}
+
+static void ShowMonEffect_Indoors_7(struct Task * task)
+{
+ IntrCallback intrCallback;
+ u16 charbase;
+ charbase = (GetGpuReg(REG_OFFSET_BG0CNT) >> 8) << 11;
+ CpuFill32(0, (void *)VRAM + charbase, 0x800);
+ LoadWordFromTwoHalfwords((u16 *)&task->data[13], (uintptr_t *)&intrCallback);
+ SetVBlankCallback(intrCallback);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ Menu_LoadStdPal();
+ FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]);
+ FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON);
+ DestroyTask(FindTaskIdByFunc(Task_ShowMon_Indoors));
+}
+
+static void VBlankCB_ShowMonEffect_Indoors(void)
+{
+ IntrCallback intrCallback;
+ struct Task * task;
+ task = &gTasks[FindTaskIdByFunc(Task_ShowMon_Indoors)];
+ LoadWordFromTwoHalfwords((u16 *)&task->data[13], (uintptr_t *)&intrCallback);
+ intrCallback();
+ SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]);
+ SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]);
+}
+
+static void sub_8086728(struct Task * task)
+{
+ task->data[1] -= 16;
+ task->data[3] += 16;
+}
+
+static bool8 sub_8086738(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] = sDarknessFieldMoveStreaksTilemap[srcOffs + i * 32];
+ dest[dstOffs + i * 32] |= 0xf000;
+
+ dest[((dstOffs + 1) & 0x1f) + i * 32] = sDarknessFieldMoveStreaksTilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000;
+ dest[((dstOffs + 1) & 0x1f) + i * 32] |= 0xf000;
+ }
+ task->data[4] += 2;
+ }
+ return FALSE;
+}
+
+static bool8 sub_80867F0(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;
+}
+
+static u8 sub_8086860(u32 species, u32 otId, u32 personality)
+{
+ bool16 playCry;
+ u8 monSprite;
+ struct Sprite * sprite;
+ playCry = (species & 0x80000000) >> 16;
+ species &= 0x7fffffff;
+ monSprite = CreateMonSprite_FieldMove(species, otId, personality, 0x140, 0x50, 0);
+ sprite = &gSprites[monSprite];
+ sprite->callback = SpriteCallbackDummy;
+ sprite->oam.priority = 0;
+ sprite->data[0] = species;
+ sprite->data[6] = playCry;
+ return monSprite;
+}
+
+static void sub_80868C0(struct Sprite * sprite)
+{
+ if ((sprite->pos1.x -= 20) <= 0x78)
+ {
+ sprite->pos1.x = 0x78;
+ sprite->data[1] = 30;
+ sprite->callback = sub_8086904;
+ if (sprite->data[6])
+ {
+ PlayCry2(sprite->data[0], 0, 0x7d, 0xa);
+ }
+ else
+ {
+ PlayCry1(sprite->data[0], 0);
+ }
+ }
+}
+
+static void sub_8086904(struct Sprite * sprite)
+{
+ if ((--sprite->data[1]) == 0)
+ {
+ sprite->callback = sub_8086920;
+ }
+}
+
+static void sub_8086920(struct Sprite * sprite)
+{
+ if (sprite->pos1.x < -0x40)
+ {
+ sprite->data[7] = 1;
+ }
+ else
+ {
+ sprite->pos1.x -= 20;
+ }
+}
+
+static void Task_FldEffUseSurf(u8 taskId);
+static void UseSurfEffect_1(struct Task * task);
+static void UseSurfEffect_2(struct Task * task);
+static void UseSurfEffect_3(struct Task * task);
+static void UseSurfEffect_4(struct Task * task);
+static void UseSurfEffect_5(struct Task * task);
+
+static void (*const sUseSurfEffectFuncs[])(struct Task * ) = {
+ UseSurfEffect_1,
+ UseSurfEffect_2,
+ UseSurfEffect_3,
+ UseSurfEffect_4,
+ UseSurfEffect_5,
+};
+
+u8 FldEff_UseSurf(void)
+{
+ u8 taskId = CreateTask(Task_FldEffUseSurf, 0xff);
+ gTasks[taskId].data[15] = gFieldEffectArguments[0];
+ sav1_reset_battle_music_maybe();
+ if (sub_8056124(MUS_NAMINORI))
+ Overworld_ChangeMusicTo(MUS_NAMINORI);
+ return FALSE;
+}
+
+static void Task_FldEffUseSurf(u8 taskId)
+{
+ sUseSurfEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+static void UseSurfEffect_1(struct Task * task)
+{
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ gPlayerAvatar.preventStep = TRUE;
+ SetPlayerAvatarStateMask(8);
+ PlayerGetDestCoords(&task->data[1], &task->data[2]);
+ MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].placeholder18, &task->data[1], &task->data[2]);
+ task->data[0]++;
+}
+
+static void UseSurfEffect_2(struct Task * task)
+{
+ struct ObjectEvent * objectEvent;
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ sub_805CB70();
+ ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
+ task->data[0]++;
+ }
+}
+
+static void UseSurfEffect_3(struct Task * task)
+{
+ struct ObjectEvent * objectEvent;
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (ObjectEventCheckHeldMovementStatus(objectEvent))
+ {
+ gFieldEffectArguments[0] = task->data[15] | 0x80000000;
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ task->data[0]++;
+ }
+}
+
+static void UseSurfEffect_4(struct Task * task)
+{
+ struct ObjectEvent * objectEvent;
+ if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ {
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
+ ObjectEventClearHeldMovementIfFinished(objectEvent);
+ ObjectEventSetHeldMovement(objectEvent, sub_80641C0(objectEvent->placeholder18));
+ gFieldEffectArguments[0] = task->data[1];
+ gFieldEffectArguments[1] = task->data[2];
+ gFieldEffectArguments[2] = gPlayerAvatar.objectEventId;
+ objectEvent->mapobj_unk_1A = FieldEffectStart(FLDEFF_SURF_BLOB);
+ task->data[0]++;
+ }
+}
+
+static void UseSurfEffect_5(struct Task * task)
+{
+ struct ObjectEvent * objectEvent;
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ gPlayerAvatar.preventStep = FALSE;
+ gPlayerAvatar.flags &= 0xdf;
+ ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->placeholder18));
+ sub_80DC44C(objectEvent->mapobj_unk_1A, 1);
+ UnfreezeObjectEvents();
+ ScriptContext2_Disable();
+ FieldEffectActiveListRemove(FLDEFF_USE_SURF);
+ DestroyTask(FindTaskIdByFunc(Task_FldEffUseSurf));
+ HelpSystem_SetSomeVariable2(22);
+ }
+}
+
+static void Task_FldEffUseVsSeeker(u8 taskId);
+static void UseVsSeekerEffect_1(struct Task * task);
+static void UseVsSeekerEffect_2(struct Task * task);
+static void UseVsSeekerEffect_3(struct Task * task);
+static void UseVsSeekerEffect_4(struct Task * task);
+
+static void (*const sUseVsSeekerEffectFuncs[])(struct Task * task) = {
+ UseVsSeekerEffect_1,
+ UseVsSeekerEffect_2,
+ UseVsSeekerEffect_3,
+ UseVsSeekerEffect_4
+};
+
+u32 FldEff_UseVsSeeker(void)
+{
+ if (gQuestLogState == QL_STATE_1)
+ sub_811278C(8, 89);
+ CreateTask(Task_FldEffUseVsSeeker, 0xFF);
+ return 0;
+}
+
+static void Task_FldEffUseVsSeeker(u8 taskId)
+{
+ sUseVsSeekerEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+static void UseVsSeekerEffect_1(struct Task * task)
+{
+ ScriptContext2_Enable();
+ FreezeObjectEvents();
+ gPlayerAvatar.preventStep = TRUE;
+ task->data[0]++;
+}
+
+static void UseVsSeekerEffect_2(struct Task * task)
+{
+ struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (!ObjectEventIsMovementOverridden(playerObj) || ObjectEventClearHeldMovementIfFinished(playerObj))
+ {
+ sub_805CBE8();
+ ObjectEventSetHeldMovement(playerObj, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
+ task->data[0]++;
+ }
+}
+
+static void UseVsSeekerEffect_3(struct Task * task)
+{
+ struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (ObjectEventClearHeldMovementIfFinished(playerObj))
+ {
+ if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE))
+ ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(1));
+ else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
+ ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(2));
+ else
+ ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(0));
+ ObjectEventForceSetSpecialAnim(playerObj, GetFaceDirectionMovementAction(playerObj->facingDirection));
+ task->data[0]++;
+ }
+}
+
+static void UseVsSeekerEffect_4(struct Task * task)
+{
+ struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (ObjectEventClearHeldMovementIfFinished(playerObj))
+ {
+ gPlayerAvatar.preventStep = FALSE;
+ FieldEffectActiveListRemove(FLDEFF_USE_VS_SEEKER);
+ DestroyTask(FindTaskIdByFunc(Task_FldEffUseVsSeeker));
+ }
+}
+
+static void sub_8086D94(struct Sprite * sprite);
+
+u8 FldEff_NpcFlyOut(void)
+{
+ u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0x78, 0, 1);
+ struct Sprite * sprite = &gSprites[spriteId];
+
+ sprite->oam.paletteNum = 0;
+ sprite->oam.priority = 1;
+ sprite->callback = sub_8086D94;
+ sprite->data[1] = gFieldEffectArguments[0];
+ PlaySE(SE_W019);
+ return spriteId;
+}
+
+static void sub_8086D94(struct Sprite * sprite)
+{
+ struct Sprite * npcSprite;
+
+ sprite->pos2.x = Cos(sprite->data[2], 0x8c);
+ sprite->pos2.y = Sin(sprite->data[2], 0x48);
+ sprite->data[2] = (sprite->data[2] + 4) & 0xff;
+ if (sprite->data[0])
+ {
+ npcSprite = &gSprites[sprite->data[1]];
+ npcSprite->coordOffsetEnabled = FALSE;
+ 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->data[2] >= 0x80)
+ {
+ FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT);
+ }
+}
+
+static void Task_UseFly(u8 taskId);
+static void UseFlyEffect_1(struct Task * task);
+static void UseFlyEffect_2(struct Task * task);
+static void UseFlyEffect_3(struct Task * task);
+static void UseFlyEffect_4(struct Task * task);
+static void UseFlyEffect_5(struct Task * task);
+static void UseFlyEffect_6(struct Task * task);
+static void UseFlyEffect_7(struct Task * task);
+static void UseFlyEffect_8(struct Task * task);
+static void UseFlyEffect_9(struct Task * task);
+static u8 sub_8087168(void);
+static bool8 sub_80871AC(u8 flyBlobSpriteId);
+static void sub_80871C8(u8 flyBlobSpriteId);
+static void sub_8087204(u8 flyBlobSpriteId, u8 playerSpriteId);
+static void sub_8087220(struct Sprite * sprite);
+static void sub_80872F0(struct Sprite * sprite);
+static void sub_80877FC(struct Sprite * sprite, u8 affineAnimId);
+static void sub_8087828(struct Sprite * sprite);
+
+static void (*const sUseFlyEffectFuncs[])(struct Task * ) = {
+ UseFlyEffect_1,
+ UseFlyEffect_2,
+ UseFlyEffect_3,
+ UseFlyEffect_4,
+ UseFlyEffect_5,
+ UseFlyEffect_6,
+ UseFlyEffect_7,
+ UseFlyEffect_8,
+ UseFlyEffect_9
+};
+
+u8 FldEff_UseFly(void)
+{
+ u8 taskId = CreateTask(Task_UseFly, 0xfe);
+ gTasks[taskId].data[1] = gFieldEffectArguments[0];
+ return 0;
+}
+
+static void Task_UseFly(u8 taskId)
+{
+ sUseFlyEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+static void UseFlyEffect_1(struct Task * task)
+{
+ struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ task->data[15] = gPlayerAvatar.flags;
+ gPlayerAvatar.preventStep = TRUE;
+ SetPlayerAvatarStateMask(1);
+ sub_805CB70();
+ ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
+ task->data[0]++;
+ }
+}
+
+static void UseFlyEffect_2(struct Task * task)
+{
+ struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ task->data[0]++;
+ gFieldEffectArguments[0] = task->data[1];
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ }
+}
+
+static void UseFlyEffect_3(struct Task * task)
+{
+ if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ {
+ struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (task->data[15] & 0x08)
+ {
+ sub_80DC44C(objectEvent->mapobj_unk_1A, 2);
+ sub_80DC478(objectEvent->mapobj_unk_1A, 0);
+ }
+ task->data[1] = sub_8087168();
+ task->data[0]++;
+ }
+}
+
+static void UseFlyEffect_4(struct Task * task)
+{
+ if (sub_80871AC(task->data[1]))
+ {
+ task->data[0]++;
+ task->data[2] = 16;
+ SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT);
+ ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], MOVEMENT_ACTION_FACE_LEFT);
+ }
+}
+
+static void UseFlyEffect_5(struct Task * task)
+{
+ struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if ((task->data[2] == 0 || (--task->data[2]) == 0) && ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ task->data[0]++;
+ PlaySE(SE_W019);
+ sub_80871C8(task->data[1]);
+ }
+}
+
+static void UseFlyEffect_6(struct Task * task)
+{
+ if ((++task->data[2]) >= 8)
+ {
+ struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
+ StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16);
+ objectEvent->inanimate = TRUE;
+ ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT);
+ task->data[0]++;
+ task->data[2] = 0;
+ }
+}
+
+static void UseFlyEffect_7(struct Task * task)
+{
+ if ((++task->data[2]) >= 10)
+ {
+ struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ ObjectEventClearAnimIfSpecialAnimActive(objectEvent);
+ objectEvent->inanimate = FALSE;
+ objectEvent->hasShadow = FALSE;
+ sub_8087204(task->data[1], objectEvent->spriteId);
+ StartSpriteAnim(&gSprites[task->data[1]], gSaveBlock2Ptr->playerGender * 2 + 1);
+ sub_80877FC(&gSprites[task->data[1]], 0);
+ gSprites[task->data[1]].callback = sub_8087828;
+ CameraObjectReset2();
+ task->data[0]++;
+ }
+}
+
+static void UseFlyEffect_8(struct Task * task)
+{
+ if (sub_80871AC(task->data[1]))
+ {
+ WarpFadeOutScreen();
+ task->data[0]++;
+ }
+}
+
+static void UseFlyEffect_9(struct Task * task)
+{
+ if (!gPaletteFade.active)
+ {
+ FieldEffectActiveListRemove(FLDEFF_USE_FLY);
+ DestroyTask(FindTaskIdByFunc(Task_UseFly));
+ }
+}
+
+static u8 sub_8087168(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_8087220;
+ return spriteId;
+}
+
+static u8 sub_80871AC(u8 spriteId)
+{
+ return gSprites[spriteId].data[7];
+}
+
+static void sub_80871C8(u8 spriteId)
+{
+ struct Sprite * sprite;
+ sprite = &gSprites[spriteId];
+ sprite->callback = sub_80872F0;
+ sprite->pos1.x = 0x78;
+ sprite->pos1.y = 0x00;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ memset(&sprite->data[0], 0, 8 * sizeof(u16) /* zero all data cells */);
+ sprite->data[6] = 0x40;
+}
+
+static void sub_8087204(u8 a0, u8 a1)
+{
+ gSprites[a0].data[6] = a1;
+}
+
+static const union AffineAnimCmd sUnknown_83CC19C[] = {
+ AFFINEANIMCMD_FRAME( 8, 8, 226, 0),
+ AFFINEANIMCMD_FRAME(28, 28, 0, 30),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sUnknown_83CC1B4[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 64, 0),
+ AFFINEANIMCMD_FRAME(-10, -10, 0, 22),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const sUnknown_83CC1CC[] = {
+ sUnknown_83CC19C,
+ sUnknown_83CC1B4
+};
+
+static void sub_8087220(struct Sprite * sprite)
+{
+ if (sprite->data[7] == 0)
+ {
+ if (sprite->data[0] == 0)
+ {
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ sprite->affineAnims = sUnknown_83CC1CC;
+ InitSpriteAffineAnim(sprite);
+ StartSpriteAffineAnim(sprite, 0);
+ if (gSaveBlock2Ptr->playerGender == MALE)
+ sprite->pos1.x = 0x80;
+ else
+ sprite->pos1.x = 0x76;
+ sprite->pos1.y = -0x30;
+ sprite->data[0]++;
+ sprite->data[1] = 0x40;
+ sprite->data[2] = 0x100;
+ }
+ sprite->data[1] += (sprite->data[2] >> 8);
+ sprite->pos2.x = Cos(sprite->data[1], 0x78);
+ sprite->pos2.y = Sin(sprite->data[1], 0x78);
+ if (sprite->data[2] < 0x800)
+ {
+ sprite->data[2] += 0x60;
+ }
+ if (sprite->data[1] > 0x81)
+ {
+ sprite->data[7]++;
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF);
+ }
+ }
+}
+
+static void sub_80872F0(struct Sprite * sprite)
+{
+ sprite->pos2.x = Cos(sprite->data[2], 0x8c);
+ sprite->pos2.y = Sin(sprite->data[2], 0x48);
+ sprite->data[2] = (sprite->data[2] + 4) & 0xff;
+ if (sprite->data[6] != MAX_SPRITES)
+ {
+ struct Sprite * sprite1 = &gSprites[sprite->data[6]];
+ sprite1->coordOffsetEnabled = FALSE;
+ 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->data[2] >= 0x80)
+ {
+ sprite->data[7] = 1;
+ }
+}
+
+static void sub_8087364(struct Sprite * sprite)
+{
+ if (sprite->data[7] == 0)
+ {
+ if (sprite->data[0] == 0)
+ {
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ sprite->affineAnims = sUnknown_83CC1CC;
+ InitSpriteAffineAnim(sprite);
+ StartSpriteAffineAnim(sprite, 1);
+ if (gSaveBlock2Ptr->playerGender == MALE)
+ sprite->pos1.x = 0x70;
+ else
+ sprite->pos1.x = 0x64;
+ sprite->pos1.y = -0x20;
+ sprite->data[0]++;
+ sprite->data[1] = 0xf0;
+ sprite->data[2] = 0x800;
+ sprite->data[4] = 0x80;
+ }
+ sprite->data[1] += sprite->data[2] >> 8;
+ sprite->data[3] += sprite->data[2] >> 8;
+ sprite->data[1] &= 0xff;
+ sprite->pos2.x = Cos(sprite->data[1], 0x20);
+ sprite->pos2.y = Sin(sprite->data[1], 0x78);
+ if (sprite->data[2] > 0x100)
+ {
+ sprite->data[2] -= sprite->data[4];
+ }
+ if (sprite->data[4] < 0x100)
+ {
+ sprite->data[4] += 24;
+ }
+ if (sprite->data[2] < 0x100)
+ {
+ sprite->data[2] = 0x100;
+ }
+ if (sprite->data[3] >= 60)
+ {
+ sprite->data[7]++;
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ sprite->invisible = TRUE;
+ }
+ }
+}
+
+static void sub_8087458(u8 spriteId)
+{
+ sub_80871C8(spriteId);
+ gSprites[spriteId].callback = sub_8087364;
+}
+
+static void Task_FldEffFlyIn(u8 taskId);
+static void FlyInEffect_1(struct Task * task);
+static void FlyInEffect_2(struct Task * task);
+static void FlyInEffect_3(struct Task * task);
+static void FlyInEffect_4(struct Task * task);
+static void FlyInEffect_5(struct Task * task);
+static void FlyInEffect_6(struct Task * task);
+static void FlyInEffect_7(struct Task * task);
+static void sub_80878C0(struct Sprite * sprite);
+
+static void (*const sFlyInEffectFuncs[])(struct Task * task) = {
+ FlyInEffect_1,
+ FlyInEffect_2,
+ FlyInEffect_3,
+ FlyInEffect_4,
+ FlyInEffect_5,
+ FlyInEffect_6,
+ FlyInEffect_7
+};
+
+u32 FldEff_FlyIn(void)
+{
+ CreateTask(Task_FldEffFlyIn, 0xfe);
+ return 0;
+}
+
+static void Task_FldEffFlyIn(u8 taskId)
+{
+ sFlyInEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+static void FlyInEffect_1(struct Task * task)
+{
+ struct ObjectEvent * objectEvent;
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ task->data[0]++;
+ task->data[2] = 33;
+ task->data[15] = gPlayerAvatar.flags;
+ gPlayerAvatar.preventStep = TRUE;
+ SetPlayerAvatarStateMask(0x01);
+ if (task->data[15] & 0x08)
+ {
+ sub_80DC44C(objectEvent->mapobj_unk_1A, 0);
+ }
+ ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
+ CameraObjectReset2();
+ ObjectEventTurn(objectEvent, DIR_WEST);
+ StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16);
+ objectEvent->invisible = FALSE;
+ task->data[1] = sub_8087168();
+ sub_80871C8(task->data[1]);
+ sub_8087204(task->data[1], objectEvent->spriteId);
+ StartSpriteAnim(&gSprites[task->data[1]], gSaveBlock2Ptr->playerGender * 2 + 2);
+ sub_80877FC(&gSprites[task->data[1]], 1);
+ gSprites[task->data[1]].callback = sub_8087828;
+ }
+}
+
+static void FlyInEffect_2(struct Task * task)
+{
+ struct ObjectEvent * objectEvent;
+ struct Sprite * sprite;
+ sub_80878C0(&gSprites[task->data[1]]);
+ if (task->data[2] == 0 || (--task->data[2]) == 0)
+ {
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ sprite = &gSprites[objectEvent->spriteId];
+ sub_8087204(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;
+ }
+}
+
+static void FlyInEffect_3(struct Task * task)
+{
+ s16 gUnknown_83CC1F0[18] = {
+ -2,
+ -4,
+ -5,
+ -6,
+ -7,
+ -8,
+ -8,
+ -8,
+ -7,
+ -7,
+ -6,
+ -5,
+ -3,
+ -2,
+ 0,
+ 2,
+ 4,
+ 8
+ };
+ struct Sprite * sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.y = gUnknown_83CC1F0[task->data[2]];
+ if ((++task->data[2]) >= 18)
+ {
+ task->data[0]++;
+ }
+}
+
+static void FlyInEffect_4(struct Task * task)
+{
+ struct ObjectEvent * objectEvent;
+ struct Sprite * sprite;
+ if (sub_80871AC(task->data[1]))
+ {
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ sprite = &gSprites[objectEvent->spriteId];
+ objectEvent->inanimate = FALSE;
+ sub_805F724(objectEvent, objectEvent->currentCoords.x, objectEvent->currentCoords.y);
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->coordOffsetEnabled = TRUE;
+ sub_805CB70();
+ ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
+ task->data[0]++;
+ }
+}
+
+static void FlyInEffect_5(struct Task * task)
+{
+ if (ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gPlayerAvatar.objectEventId]))
+ {
+ task->data[0]++;
+ sub_8087458(task->data[1]);
+ }
+}
+
+static void FlyInEffect_6(struct Task * task)
+{
+ if (sub_80871AC(task->data[1]))
+ {
+ DestroySprite(&gSprites[task->data[1]]);
+ task->data[0]++;
+ task->data[1] = 0x10;
+ }
+}
+
+static void FlyInEffect_7(struct Task * task)
+{
+ u8 state;
+ struct ObjectEvent * objectEvent;
+ if ((--task->data[1]) == 0)
+ {
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ state = 0;
+ if (task->data[15] & 0x08)
+ {
+ state = 2;
+ sub_80DC44C(objectEvent->mapobj_unk_1A, 1);
+ }
+ ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(state));
+ ObjectEventTurn(objectEvent, DIR_SOUTH);
+ gPlayerAvatar.flags = task->data[15];
+ gPlayerAvatar.preventStep = FALSE;
+ FieldEffectActiveListRemove(FLDEFF_FLY_IN);
+ DestroyTask(FindTaskIdByFunc(Task_FldEffFlyIn));
+ }
+}
+
+static const union AffineAnimCmd sUnknown_83CC214[] = {
+ AFFINEANIMCMD_FRAME(24, 24, 0, 1),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+static const union AffineAnimCmd sUnknown_83CC224[] = {
+ AFFINEANIMCMD_FRAME(512, 512, 0, 1),
+ AFFINEANIMCMD_FRAME(-16, -16, 0, 1),
+ AFFINEANIMCMD_JUMP(1)
+};
+
+static const union AffineAnimCmd *const sUnknown_83CC23C[] = {
+ sUnknown_83CC214,
+ sUnknown_83CC224
+};
+
+static void sub_80877FC(struct Sprite * sprite, u8 affineAnimId)
+{
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ sprite->affineAnims = sUnknown_83CC23C;
+ InitSpriteAffineAnim(sprite);
+ StartSpriteAffineAnim(sprite, affineAnimId);
+}
+
+static void sub_8087828(struct Sprite * sprite)
+{
+ struct Sprite * sprite2;
+ sprite->pos2.x = Cos(sprite->data[2], 0xB4);
+ sprite->pos2.y = Sin(sprite->data[2], 0x48);
+ sprite->data[2] += 2;
+ sprite->data[2] &= 0xFF;
+ if (sprite->data[6] != MAX_SPRITES)
+ {
+ sprite2 = &gSprites[sprite->data[6]];
+ sprite2->coordOffsetEnabled = FALSE;
+ sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x;
+ sprite2->pos1.y = sprite->pos1.y + sprite->pos2.y - 8;
+ sprite2->pos2.x = 0;
+ sprite2->pos2.y = 0;
+ }
+ if (sprite->data[2] >= 0x80)
+ {
+ sprite->data[7] = 1;
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF);
+ }
+}
+
+static void sub_80878C0(struct Sprite * sprite)
+{
+ if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF)
+ {
+ if (gOamMatrices[sprite->oam.matrixNum].a == 0x100 || gOamMatrices[sprite->oam.matrixNum].d == 0x100)
+ {
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF);
+ StartSpriteAnim(sprite, 0);
+ sprite->callback = sub_80872F0;
+ }
+ }
+}
+
+static void Task_MoveDeoxysRock_Step(u8 taskId);
+
+u32 FldEff_MoveDeoxysRock(void)
+{
+ u8 taskId;
+ u8 objectEventIdBuffer;
+ s32 x;
+ s32 y;
+ struct ObjectEvent * objectEvent;
+ if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer))
+ {
+ objectEvent = &gObjectEvents[objectEventIdBuffer];
+ x = objectEvent->currentCoords.x - 7;
+ y = objectEvent->currentCoords.y - 7;
+ x = (gFieldEffectArguments[3] - x) * 16;
+ y = (gFieldEffectArguments[4] - y) * 16;
+ npc_coords_shift(objectEvent, gFieldEffectArguments[3] + 7, gFieldEffectArguments[4] + 7);
+ taskId = CreateTask(Task_MoveDeoxysRock_Step, 0x50);
+ gTasks[taskId].data[1] = objectEvent->spriteId;
+ gTasks[taskId].data[2] = gSprites[objectEvent->spriteId].pos1.x + x;
+ gTasks[taskId].data[3] = gSprites[objectEvent->spriteId].pos1.y + y;
+ gTasks[taskId].data[8] = gFieldEffectArguments[5];
+ gTasks[taskId].data[9] = objectEventIdBuffer;
+ }
+ return FALSE;
+}
+
+static void Task_MoveDeoxysRock_Step(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ struct Sprite * sprite = &gSprites[data[1]];
+ struct ObjectEvent * objectEvent;
+ switch (data[0])
+ {
+ case 0:
+ data[4] = sprite->pos1.x << 4;
+ data[5] = sprite->pos1.y << 4;
+ data[6] = ((data[2] << 4) - data[4]) / data[8];
+ data[7] = ((data[3] << 4) - data[5]) / data[8];
+ data[0]++;
+ // fallthrough
+ case 1:
+ if (data[8] != 0)
+ {
+ data[8]--;
+ data[4] += data[6];
+ data[5] += data[7];
+ sprite->pos1.x = data[4] >> 4;
+ sprite->pos1.y = data[5] >> 4;
+ }
+ else
+ {
+ objectEvent = &gObjectEvents[data[9]];
+ sprite->pos1.x = data[2];
+ sprite->pos1.y = data[3];
+ npc_coords_shift_still(objectEvent);
+ objectEvent->triggerGroundEffectsOnStop = TRUE;
+ FieldEffectActiveListRemove(FLDEFF_MOVE_DEOXYS_ROCK);
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+static void Task_FldEffUnk44(u8 taskId);
+static void Unk44Effect_0(s16 *data, u8 taskId);
+static void Unk44Effect_1(s16 *data, u8 taskId);
+static void Unk44Effect_2(s16 *data, u8 taskId);
+static void sub_8087CFC(struct Sprite * sprite);
+static void SpriteCB_FldEffUnk44(struct Sprite * sprite);
+
+static void (*const sUnk44EffectFuncs[])(s16 *data, u8 taskId) = {
+ Unk44Effect_0,
+ Unk44Effect_1,
+ Unk44Effect_2
+};
+
+static const struct SpriteFrameImage sImages_FldEffUnk44[] = {
+ {sFldEffUnk44_Tiles + 0x00, 0x20},
+ {sFldEffUnk44_Tiles + 0x10, 0x20},
+ {sFldEffUnk44_Tiles + 0x20, 0x20},
+ {sFldEffUnk44_Tiles + 0x30, 0x20}
+};
+
+static const union AnimCmd sAnimCmd_FldEffUnk44_0[] = {
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnimCmd_FldEffUnk44_1[] = {
+ ANIMCMD_FRAME(1, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnimCmd_FldEffUnk44_2[] = {
+ ANIMCMD_FRAME(2, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnimCmd_FldEffUnk44_3[] = {
+ ANIMCMD_FRAME(3, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sAnimCmdTable_FldEffUnk44[] = {
+ sAnimCmd_FldEffUnk44_0,
+ sAnimCmd_FldEffUnk44_1,
+ sAnimCmd_FldEffUnk44_2,
+ sAnimCmd_FldEffUnk44_3
+};
+
+static const struct SpriteTemplate sUnknown_83CC2A0 = {
+ .tileTag = SPRITE_INVALID_TAG,
+ .paletteTag = 4371,
+ .oam = &sOamData_8x8,
+ .anims = sAnimCmdTable_FldEffUnk44,
+ .images = sImages_FldEffUnk44,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_FldEffUnk44
+};
+
+u32 FldEff_Unk44(void)
+{
+ u8 taskId;
+ u8 objectEventIdBuffer;
+ if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer))
+ {
+ taskId = CreateTask(Task_FldEffUnk44, 0x50);
+ gTasks[taskId].data[2] = objectEventIdBuffer;
+ gTasks[taskId].data[6] = gFieldEffectArguments[0];
+ gTasks[taskId].data[7] = gFieldEffectArguments[1];
+ gTasks[taskId].data[8] = gFieldEffectArguments[2];
+ }
+ else
+ {
+ FieldEffectActiveListRemove(FLDEFF_UNK_44);
+ }
+ return FALSE;
+}
+
+static void sub_8087B14(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ if (data[7] != 0)
+ {
+ if (++data[6] > 20)
+ {
+ data[6] = 0;
+ if (data[5] != 0)
+ data[5]--;
+ }
+ }
+ else
+ {
+ data[5] = 4;
+ }
+
+ if (++data[0] > 1)
+ {
+ data[0] = 0;
+ if (++data[1] & 1)
+ {
+ SetCameraPanning(0, -data[5]);
+ }
+ else
+ {
+ SetCameraPanning(0, data[5]);
+ }
+ }
+ UpdateCameraPanning();
+ if (data[5] == 0)
+ DestroyTask(taskId);
+}
+
+static void sub_8087BA8(u8 taskId)
+{
+ gTasks[taskId].data[7] = 1;
+}
+
+static void Task_FldEffUnk44(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ InstallCameraPanAheadCallback();
+ SetCameraPanningCallback(NULL);
+ sUnk44EffectFuncs[data[1]](data, taskId);
+}
+
+static void Unk44Effect_0(s16 *data, u8 taskId)
+{
+ u8 newTaskId = CreateTask(sub_8087B14, 90);
+ PlaySE(SE_T_KAMI2);
+ data[5] = newTaskId;
+ data[1]++;
+}
+
+static void Unk44Effect_1(s16 *data, u8 taskId)
+{
+ if (++data[3] > 0x78)
+ {
+ struct Sprite * sprite = &gSprites[gObjectEvents[data[2]].spriteId];
+ gObjectEvents[data[2]].invisible = TRUE;
+ BlendPalettes(0x0000FFFF, 0x10, RGB_WHITE);
+ BeginNormalPaletteFade(0x0000FFFF, 0, 0x10, 0, RGB_WHITE);
+ sub_8087CFC(sprite);
+ PlaySE(SE_T_KAMI);
+ sub_8087BA8(data[5]);
+ data[3] = 0;
+ data[1]++;
+ }
+}
+
+static void Unk44Effect_2(s16 *data, u8 taskId)
+{
+ if (!gPaletteFade.active && !FuncIsActiveTask(sub_8087B14))
+ {
+ InstallCameraPanAheadCallback();
+ RemoveObjectEventByLocalIdAndMap(data[6], data[7], data[8]);
+ FieldEffectActiveListRemove(FLDEFF_UNK_44);
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_8087CFC(struct Sprite* sprite)
+{
+ int i;
+ int xPos = (s16)gTotalCameraPixelOffsetX + sprite->pos1.x + sprite->pos2.x;
+ int yPos = (s16)gTotalCameraPixelOffsetY + sprite->pos1.y + sprite->pos2.y - 4;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 spriteId = CreateSprite(&sUnknown_83CC2A0, xPos, yPos, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ StartSpriteAnim(&gSprites[spriteId], i);
+ gSprites[spriteId].data[0] = i;
+ gSprites[spriteId].oam.paletteNum = sprite->oam.paletteNum;
+ }
+ }
+}
+
+static void SpriteCB_FldEffUnk44(struct Sprite* sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos1.x -= 16;
+ sprite->pos1.y -= 12;
+ break;
+ case 1:
+ sprite->pos1.x += 16;
+ sprite->pos1.y -= 12;
+ break;
+ case 2:
+ sprite->pos1.x -= 16;
+ sprite->pos1.y += 12;
+ break;
+ case 3:
+ sprite->pos1.x += 16;
+ sprite->pos1.y += 12;
+ break;
+ }
+ if (sprite->pos1.x < -4 || sprite->pos1.x > 0xF4 || sprite->pos1.y < -4 || sprite->pos1.y > 0xA4)
+ DestroySprite(sprite);
+}
+
+static void Task_FldEffUnk45(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ FieldEffectActiveListRemove(FLDEFF_UNK_45);
+ DestroyTask(taskId);
+ }
+}
+
+// Bug: Return value should be u32, not void
+void FldEff_Unk45(void)
+{
+ BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE);
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0x0F, 0x00, RGB_WHITE);
+ CreateTask(Task_FldEffUnk45, 90);
+}
diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c
index 3118061d8..4ff105056 100644
--- a/src/field_fadetransition.c
+++ b/src/field_fadetransition.c
@@ -50,7 +50,7 @@ void palette_bg_faded_fill_black(void)
CpuFastFill16(RGB_BLACK, gPlttBufferFaded, 0x400);
}
-void pal_fill_for_maplights(void)
+void WarpFadeInScreen(void)
{
switch (sub_80C9DCC(get_map_light_from_warp0(), GetCurrentMapType()))
{
@@ -84,14 +84,14 @@ static void sub_807DBAC(void)
}
}
-void sub_807DC00(void)
+void FadeInFromBlack(void)
{
palette_bg_faded_fill_black();
FadeScreen(0, 0);
palette_bg_faded_fill_black();
}
-void sub_807DC18(void)
+void WarpFadeOutScreen(void)
{
const struct MapHeader *header = warp1_get_mapheader();
if (header->regionMapSectionId != gMapHeader.regionMapSectionId && sub_80F8110(header->regionMapSectionId, FALSE))
@@ -138,7 +138,7 @@ void sub_807DCE4(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
- sub_807DC00();
+ FadeInFromBlack();
CreateTask(task0A_nop_for_a_while, 10);
}
@@ -155,14 +155,14 @@ void FieldCallback_ReturnToEventScript2(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
- sub_807DC00();
+ FadeInFromBlack();
CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10);
}
void sub_807DD44(void)
{
ScriptContext2_Enable();
- sub_807DC00();
+ FadeInFromBlack();
CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10);
}
@@ -178,7 +178,7 @@ static void task_mpl_807DD60(u8 taskId)
case 1:
if (gTasks[task->data[1]].isActive != TRUE)
{
- pal_fill_for_maplights();
+ WarpFadeInScreen();
task->data[0]++;
}
break;
@@ -212,7 +212,7 @@ static void sub_807DDF0(u8 taskId)
case 1:
if (IsLinkTaskFinished())
{
- pal_fill_for_maplights();
+ WarpFadeInScreen();
task->data[0]++;
}
break;
@@ -278,9 +278,9 @@ static void sub_807DE78(bool8 a0)
static void sub_807DF4C(bool8 a0)
{
if (!a0)
- pal_fill_for_maplights();
+ WarpFadeInScreen();
else
- sub_807DC00();
+ FadeInFromBlack();
}
void sub_807DF64(void)
@@ -302,7 +302,7 @@ void sub_807DF7C(void)
static void sub_807DF94(void)
{
Overworld_PlaySpecialMapMusic();
- pal_fill_for_maplights();
+ WarpFadeInScreen();
sub_8111CF0();
PlaySE(SE_TK_WARPOUT);
CreateTask(sub_807E31C, 10);
@@ -485,7 +485,7 @@ static void Task_WaitFadeAndCreateStartMenuTask(u8 taskId)
void FadeTransition_FadeInOnReturnToStartMenu(void)
{
- sub_807DC00();
+ FadeInFromBlack();
CreateTask(Task_WaitFadeAndCreateStartMenuTask, 80);
ScriptContext2_Enable();
}
@@ -510,7 +510,7 @@ void sub_807E3EC(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
- sub_807DC00();
+ FadeInFromBlack();
CreateTask(task_mpl_807E3C8, 10);
}
@@ -530,8 +530,8 @@ bool32 sub_807E418(void)
void DoWarp(void)
{
ScriptContext2_Enable();
- sub_8055F88();
- sub_807DC18();
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
PlaySE(SE_KAIDAN);
gFieldCallback = sub_807DF64;
@@ -541,8 +541,8 @@ void DoWarp(void)
void DoDiveWarp(void)
{
ScriptContext2_Enable();
- sub_8055F88();
- sub_807DC18();
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
gFieldCallback = sub_807DF64;
CreateTask(sub_807E718, 10);
@@ -580,31 +580,31 @@ void sub_807E524(void)
void DoFallWarp(void)
{
DoDiveWarp();
- gFieldCallback = sub_8084454;
+ gFieldCallback = FieldCB_FallWarpExit;
}
void sub_807E560(u8 a0)
{
ScriptContext2_Enable();
- sub_8084784(a0, 10);
+ StartEscalatorWarp(a0, 10);
}
void sub_807E57C(void)
{
ScriptContext2_Enable();
- sub_8084F2C(10);
+ StartLavaridgeGymB1FWarp(10);
}
void sub_807E58C(void)
{
ScriptContext2_Enable();
- sub_80853CC(10);
+ StartLavaridgeGym1FWarp(10);
}
void sub_807E59C(void)
{
ScriptContext2_Enable();
- sub_8055F88();
+ TryFadeOutOldMapMusic();
CreateTask(sub_807E784, 10);
gFieldCallback = sub_807DF94;
}
@@ -612,7 +612,7 @@ void sub_807E59C(void)
void sub_807E5C4(void)
{
ScriptContext2_Enable();
- sub_807DC18();
+ WarpFadeOutScreen();
CreateTask(sub_807E718, 10);
gFieldCallback = nullsub_60;
}
@@ -641,8 +641,8 @@ static void sub_807E5EC(u8 taskId)
void DoCableClubWarp(void)
{
ScriptContext2_Enable();
- sub_8055F88();
- sub_807DC18();
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
PlaySE(SE_KAIDAN);
CreateTask(sub_807E5EC, 10);
}
@@ -655,7 +655,7 @@ static void sub_807E678(u8 taskId)
case 0:
ClearLinkCallback_2();
FadeScreen(1, 0);
- sub_8055F88();
+ TryFadeOutOldMapMusic();
PlaySE(SE_KAIDAN);
data[0]++;
break;
@@ -719,7 +719,7 @@ static void sub_807E784(u8 taskId)
case 1:
if (!sub_805DAD0())
{
- sub_807DC18();
+ WarpFadeOutScreen();
task->data[0]++;
}
break;
@@ -773,14 +773,14 @@ static void sub_807E80C(u8 taskId)
}
break;
case 4:
- sub_8055F88();
- sub_807DC18();
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
task->data[0] = 0;
task->func = sub_807E718;
break;
case 5:
- sub_8055F88();
+ TryFadeOutOldMapMusic();
PlayRainStoppingSoundEffect();
task->data[0] = 0;
task->func = sub_807E718;
@@ -808,7 +808,7 @@ static void sub_807E980(u8 taskId)
data[15]--;
else
{
- sub_8055F88();
+ TryFadeOutOldMapMusic();
PlayRainStoppingSoundEffect();
playerSpr->oam.priority = 1;
sub_807EB64(data[1], &data[2], &data[3]);
@@ -822,7 +822,7 @@ static void sub_807E980(u8 taskId)
data[15]++;
if (data[15] >= 12)
{
- sub_807DC18();
+ WarpFadeOutScreen();
data[0]++;
}
break;
@@ -906,7 +906,7 @@ static void sub_807EC34(u8 taskId)
break;
case 0:
Overworld_PlaySpecialMapMusic();
- pal_fill_for_maplights();
+ WarpFadeInScreen();
ScriptContext2_Enable();
sub_807ECBC(&data[1], &data[2], &data[3], &data[4], &data[5]);
data[0]++;
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index 0a3224cfa..39d7a2312 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -430,7 +430,7 @@ static void sub_807F45C(u8 taskId)
CopyWindowToVram(windowId, 1);
RemoveWindow(windowId);
palette_bg_faded_fill_black();
- sub_807DC00();
+ FadeInFromBlack();
++gTasks[taskId].data[0];
break;
case 3:
diff --git a/src/field_specials.c b/src/field_specials.c
index 01ad069ac..e3283d9fe 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -2389,13 +2389,13 @@ static void MoveDeoxysObject(u8 num)
gFieldEffectArguments[5] = 60;
else
gFieldEffectArguments[5] = 5;
- FieldEffectStart(FLDEFF_UNK_43);
+ FieldEffectStart(FLDEFF_MOVE_DEOXYS_ROCK);
Overworld_SetMapObjTemplateCoords(1, sDeoxysCoords[num][0], sDeoxysCoords[num][1]);
}
static void Task_WaitDeoxysFieldEffect(u8 taskId)
{
- if (!FieldEffectActiveListContains(FLDEFF_UNK_43))
+ if (!FieldEffectActiveListContains(FLDEFF_MOVE_DEOXYS_ROCK))
{
EnableBothScriptContexts();
DestroyTask(taskId);
diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c
index 397741806..dc372ce18 100644
--- a/src/fldeff_rocksmash.c
+++ b/src/fldeff_rocksmash.c
@@ -48,7 +48,7 @@ static void Task_FieldEffectShowMon_Init(u8 taskId)
u8 mapObjId;
ScriptContext2_Enable();
- gPlayerAvatar.unk6 = TRUE;
+ gPlayerAvatar.preventStep = TRUE;
mapObjId = gPlayerAvatar.objectEventId;
if (!ObjectEventIsMovementOverridden(&gObjectEvents[mapObjId])
|| ObjectEventClearHeldMovementIfFinished(&gObjectEvents[mapObjId]))
@@ -62,7 +62,7 @@ static void Task_FieldEffectShowMon_Init(u8 taskId)
else
{
sub_805CB70();
- ObjectEventSetHeldMovement(&gObjectEvents[mapObjId], MOVEMENT_ACTION_UNKNOWN_STEP_45);
+ ObjectEventSetHeldMovement(&gObjectEvents[mapObjId], MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
gTasks[taskId].func = Task_FieldEffectShowMon_WaitPlayerAnim;
}
}
@@ -100,7 +100,7 @@ static void Task_FieldEffectShowMon_WaitFldeff(u8 taskId)
static void Task_FieldEffectShowMon_Cleanup(u8 taskId)
{
FLDEFF_CALL_FUNC_IN_DATA();
- gPlayerAvatar.unk6 = FALSE;
+ gPlayerAvatar.preventStep = FALSE;
DestroyTask(taskId);
}
diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c
index 712d9f1c6..c6b92b28c 100644
--- a/src/fldeff_strength.c
+++ b/src/fldeff_strength.c
@@ -8,8 +8,8 @@
#include "event_scripts.h"
#include "constants/event_objects.h"
-static void FldEff_UseStrength(void);
-static void sub_80D08A8(void);
+static void FieldCB_UseStrength(void);
+static void ShowMonCB_UseStrength(void);
bool8 SetUpFieldMove_Strength(void)
{
@@ -21,25 +21,25 @@ bool8 SetUpFieldMove_Strength(void)
{
gSpecialVar_Result = GetCursorSelectionMonId();
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
- gPostMenuFieldCallback = FldEff_UseStrength;
+ gPostMenuFieldCallback = FieldCB_UseStrength;
return TRUE;
}
}
-static void FldEff_UseStrength(void)
+static void FieldCB_UseStrength(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
ScriptContext1_SetupScript(EventScript_FldEffStrength);
}
-bool8 sub_80D0860(void)
+bool8 FldEff_UseStrength(void)
{
u8 taskId = CreateFieldEffectShowMon();
- FLDEFF_SET_FUNC_TO_DATA(sub_80D08A8);
+ FLDEFF_SET_FUNC_TO_DATA(ShowMonCB_UseStrength);
GetMonNickname(&gPlayerParty[gFieldEffectArguments[0]], gStringVar1);
return FALSE;
}
-static void sub_80D08A8(void)
+static void ShowMonCB_UseStrength(void)
{
FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH);
EnableBothScriptContexts();
diff --git a/src/item_use.c b/src/item_use.c
index f5e880f98..ec8155eb1 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -170,7 +170,7 @@ static void sub_80A103C(u8 taskId)
static void sub_80A1084(void)
{
- sub_807DC00();
+ FadeInFromBlack();
CreateTask(sub_80A109C, 8);
}
@@ -223,7 +223,7 @@ static bool8 sub_80A1194(void)
{
FreezeObjectEvents();
ScriptContext2_Enable();
- sub_807DC00();
+ FadeInFromBlack();
CreateTask(sub_80A11C0, 10);
gUnknown_2031DE0 = 0;
return TRUE;
@@ -646,7 +646,7 @@ static void sub_80A1C08(u8 taskId)
void sub_80A1C44(u8 taskId)
{
ResetInitialPlayerAvatarState();
- sub_8085620();
+ StartEscapeRopeFieldEffect();
DestroyTask(taskId);
}
diff --git a/src/main.c b/src/main.c
index a67c71746..77f668e6f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -20,6 +20,7 @@
#include "battle_controllers.h"
#include "scanline_effect.h"
#include "save_failed_screen.h"
+#include "quest_log.h"
extern u32 intr_main[];
@@ -77,9 +78,6 @@ static IntrFunc * const sTimerIntrFunc = gIntrTable + 0x7;
EWRAM_DATA u8 gDecompressionBuffer[0x4000] = {0};
EWRAM_DATA u16 gTrainerId = 0;
-extern bool8 gWirelessCommType;
-extern bool8 gUnknown_3005E88;
-
static void UpdateLinkAndCallCallbacks(void);
static void InitMainCallbacks(void);
static void CallCallbacks(void);
@@ -178,7 +176,7 @@ static void InitMainCallbacks(void)
gSaveBlock2Ptr = &gSaveBlock2;
gSaveBlock1Ptr = &gSaveBlock1;
gSaveBlock2.encryptionKey = 0;
- gUnknown_3005E88 = FALSE;
+ gUnknown_3005E88 = 0;
}
static void CallCallbacks(void)
diff --git a/src/map_preview_screen.c b/src/map_preview_screen.c
index bb748ae91..b5c68acf9 100644
--- a/src/map_preview_screen.c
+++ b/src/map_preview_screen.c
@@ -490,7 +490,7 @@ static void sub_80F83D0(u8 taskId)
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_807DC00();
+ FadeInFromBlack();
data[0]++;
}
break;
diff --git a/src/party_menu.c b/src/party_menu.c
index 6f2feaaad..626ce70f8 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "malloc.h"
+#include "gflib.h"
#include "battle.h"
#include "battle_anim.h"
#include "battle_controllers.h"
@@ -7,7 +7,6 @@
#include "battle_interface.h"
#include "battle_tower.h"
#include "berry_pouch.h"
-#include "bg.h"
#include "data.h"
#include "decompress.h"
#include "easy_chat.h"
@@ -15,11 +14,10 @@
#include "evolution_scene.h"
#include "field_effect.h"
#include "field_player_avatar.h"
-#include "field_screen_effect.h"
+#include "field_fadetransition.h"
#include "field_weather.h"
#include "fieldmap.h"
#include "fldeff.h"
-#include "gpu_regs.h"
#include "graphics.h"
#include "help_system.h"
#include "item.h"
@@ -36,7 +34,6 @@
#include "new_menu_helpers.h"
#include "metatile_behavior.h"
#include "overworld.h"
-#include "palette.h"
#include "party_menu.h"
#include "player_pc.h"
#include "pokedex.h"
@@ -50,19 +47,15 @@
#include "reshow_battle_screen.h"
#include "scanline_effect.h"
#include "script.h"
-#include "sound.h"
-#include "sprite.h"
#include "start_menu.h"
#include "string_util.h"
#include "strings.h"
#include "task.h"
#include "teachy_tv.h"
-#include "text.h"
#include "text_window.h"
#include "tm_case.h"
#include "trade.h"
#include "union_room.h"
-#include "window.h"
#include "constants/battle.h"
#include "constants/easy_chat.h"
#include "constants/field_effects.h"
@@ -4044,7 +4037,7 @@ static void Task_HandleFieldMoveExitAreaYesNoInput(u8 taskId)
bool8 FieldCallback_PrepareFadeInFromMenu(void)
{
- sub_807DC00();
+ FadeInFromBlack();
CreateTask(Task_FieldMoveWaitForFade, 8);
return TRUE;
}
@@ -6361,7 +6354,7 @@ void ChoosePartyMonByMenuType(u8 menuType)
static bool8 CB2_FadeFromPartyMenu(void)
{
- sub_807DC00();
+ FadeInFromBlack();
CreateTask(Task_PartyMenuWaitForFade, 10);
return TRUE;
}
diff --git a/src/player_pc.c b/src/player_pc.c
index 928676844..8943e0796 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -347,7 +347,7 @@ static void CB2_ReturnFromDepositMenu(void)
DrawDialogueFrame(0, TRUE);
taskId = CreateTask(Task_ReturnToItemStorageSubmenu, 0);
Task_CreateItemStorageSubmenu(taskId, 1);
- sub_807DC00();
+ FadeInFromBlack();
}
static void Task_PlayerPcWithdrawItem(u8 taskId)
@@ -376,7 +376,7 @@ static void CB2_ReturnFromWithdrawMenu(void)
DrawDialogueFrame(0, TRUE);
taskId = CreateTask(Task_ReturnToItemStorageSubmenu, 0);
Task_CreateItemStorageSubmenu(taskId, 0);
- sub_807DC00();
+ FadeInFromBlack();
}
static void Task_WithdrawItem_WaitFadeAndGoToItemStorage(u8 taskId)
@@ -590,7 +590,7 @@ static void CB2_ReturnToMailbox(void)
Task_DrawMailboxPcMenu(taskId);
else
DestroyTask(taskId);
- sub_807DC00();
+ FadeInFromBlack();
}
static void CB2_SetCbToReturnToMailbox(void)
@@ -705,7 +705,7 @@ static void CB2_ReturnToMailboxPc_UpdateScrollVariables(void)
Task_DrawMailboxPcMenu(taskId);
else
DestroyTask(taskId);
- sub_807DC00();
+ FadeInFromBlack();
}
void Mailbox_ReturnToMailListAfterDeposit(void)
diff --git a/src/quest_log.c b/src/quest_log.c
index 6e70ceea8..c9a930032 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -2761,7 +2761,7 @@ static bool8 TrySetTrainerBattleQuestLogEvent(u16 eventId, const u16 *eventData)
return FALSE;
sub_81138F8();
- if (gUnknown_3005E88 || FlagGet(FLAG_SYS_GAME_CLEAR) || sub_81137E4(eventId, eventData) != TRUE)
+ if (gUnknown_3005E88 != 0 || FlagGet(FLAG_SYS_GAME_CLEAR) || sub_81137E4(eventId, eventData) != TRUE)
{
gUnknown_203B024.unk_00 = eventId;
memcpy(gUnknown_203B024.unk_04, eventData, 8);
diff --git a/src/quest_log_player.c b/src/quest_log_player.c
index b6167a7bf..ccf0565fb 100644
--- a/src/quest_log_player.c
+++ b/src/quest_log_player.c
@@ -80,7 +80,7 @@ static void sub_8150530(void)
{
u8 taskId;
ScriptContext2_Enable();
- gPlayerAvatar.unk6 = 1;
+ gPlayerAvatar.preventStep = TRUE;
taskId = CreateTask(sub_81505C4, 0xFF);
gTasks[taskId].data[0] = 0;
}
@@ -156,13 +156,13 @@ static void sub_8150708(void)
static void sub_815077C(void)
{
- FieldEffectStart(FLDEFF_UNK_41);
+ FieldEffectStart(FLDEFF_USE_VS_SEEKER);
CreateTask(sub_8150794, 0x00);
}
static void sub_8150794(u8 taskId)
{
- if (!FieldEffectActiveListContains(0x41))
+ if (!FieldEffectActiveListContains(FLDEFF_USE_VS_SEEKER))
{
UnfreezeObjectEvents();
ScriptContext2_Disable();
diff --git a/src/region_map.c b/src/region_map.c
index 4335b7d96..0c2d511bf 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -4395,5 +4395,5 @@ static void sub_80C527C(u16 mapsec)
{
warp1_set_2(sMapsecToSpawn[idx][0], sMapsecToSpawn[idx][1], -1);
}
- sub_80842C8();
+ ReturnToFieldFromFlyMapSelect();
}
diff --git a/src/script_menu.c b/src/script_menu.c
index 72ff1dc9e..12e89832c 100644
--- a/src/script_menu.c
+++ b/src/script_menu.c
@@ -1022,7 +1022,7 @@ static void Task_ScriptShowMonPic(u8 taskId)
case 1:
break;
case 2:
- sub_8083A5C(&gSprites[task->data[2]], task->data[2]);
+ FreeResourcesAndDestroySprite(&gSprites[task->data[2]], task->data[2]);
task->data[0]++;
break;
case 3:
@@ -1040,7 +1040,7 @@ bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y)
return TRUE;
if (FindTaskIdByFunc(Task_ScriptShowMonPic) != 0xFF)
return FALSE;
- spriteId = sub_8083970(species, 8 * x + 40, 8 * y + 40, FALSE);
+ spriteId = CreateMonSprite_PicBox(species, 8 * x + 40, 8 * y + 40, FALSE);
taskId = CreateTask(Task_ScriptShowMonPic, 80);
gTasks[taskId].data[5] = CreateWindowFromRect(x, y, 8, 8);
gTasks[taskId].data[0] = 0;
@@ -1082,7 +1082,7 @@ void sub_809D424(void)
case 0:
case 1:
case 2:
- sub_8083A5C(&gSprites[task->data[2]], task->data[2]);
+ FreeResourcesAndDestroySprite(&gSprites[task->data[2]], task->data[2]);
DestroyScriptMenuWindow(task->data[5]);
DestroyTask(taskId);
break;
@@ -1183,7 +1183,7 @@ void QLPlaybackCB_DestroyScriptMenuMonPicSprites(void)
{
data = gTasks[taskId].data;
if (data[0] < 2)
- sub_8083A5C(&gSprites[data[2]], data[2]);
+ FreeResourcesAndDestroySprite(&gSprites[data[2]], data[2]);
}
taskId = FindTaskIdByFunc(Task_WaitMuseumFossilPic);
if (taskId != 0xFF)
diff --git a/src/seagallop.c b/src/seagallop.c
index aa0c48da1..3257819aa 100644
--- a/src/seagallop.c
+++ b/src/seagallop.c
@@ -295,7 +295,7 @@ static void Task_Seagallop_1(u8 taskId)
if (++task->data[1] == 140)
{
Overworld_FadeOutMapMusic();
- sub_807DC18();
+ WarpFadeOutScreen();
task->func = Task_Seagallop_2;
}
}
diff --git a/src/shop.c b/src/shop.c
index efbbbd979..5a9ee6b95 100644
--- a/src/shop.c
+++ b/src/shop.c
@@ -336,7 +336,7 @@ static void Task_GoToBuyOrSellMenu(u8 taskId)
static void MapPostLoadHook_ReturnToShopMenu(void)
{
- sub_807DC00();
+ FadeInFromBlack();
CreateTask(Task_ReturnToShopMenu, 8);
}
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
index 135a11575..f60e22f96 100644
--- a/src/vs_seeker.c
+++ b/src/vs_seeker.c
@@ -748,7 +748,7 @@ void Task_VsSeeker_0(u8 taskId)
else if (respval == 2)
{
ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, 0, gSpecialVar_ItemId, 0xffff);
- FieldEffectStart(FLDEFF_UNK_41); // TODO: name this enum
+ FieldEffectStart(FLDEFF_USE_VS_SEEKER);
gTasks[taskId].func = Task_VsSeeker_1;
gTasks[taskId].data[0] = 15;
}
@@ -774,7 +774,7 @@ static void Task_VsSeeker_2(u8 taskId)
data[2]++;
}
- if (!FieldEffectActiveListContains(FLDEFF_UNK_41))
+ if (!FieldEffectActiveListContains(FLDEFF_USE_VS_SEEKER))
{
data[1] = 0;
data[2] = 0;
diff --git a/sym_bss.txt b/sym_bss.txt
index ec3d7d947..b877b6532 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -60,10 +60,8 @@ gUnknown_3000EA0: @ 3000EA0
.include "src/tileset_anims.o"
.align 2
.include "src/sound.o"
-
.align 2
-gUnknown_3000FC8: @ 3000FC8
- .space 0x20
+ .include "src/field_effect.o"
gUnknown_3000FE8: @ 3000FE8
.space 0x184
diff --git a/sym_common.txt b/sym_common.txt
index 22883fd0a..37fa1cf7c 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -51,10 +51,10 @@ gFieldLinkPlayerCount: @ 3005030
gUnknown_3005050: @ 3005050
.space 0x18
-gUnknown_3005068: @ 3005068
+gTotalCameraPixelOffsetY: @ 3005068
.space 0x4
-gUnknown_300506C: @ 300506C
+gTotalCameraPixelOffsetX: @ 300506C
.space 0x4
.align 2