summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/event_object_movement.s84
-rw-r--r--asm/field_effect_helpers.s4308
-rw-r--r--asm/field_player_avatar.s6
-rw-r--r--asm/field_weather.s8
-rw-r--r--asm/field_weather_effects.s2
-rw-r--r--asm/overworld.s2
-rw-r--r--data/event_object_movement.s52
-rw-r--r--data/field_effect_helpers.s34
-rw-r--r--data/field_effect_scripts.s8
-rw-r--r--include/event_object_movement.h15
-rw-r--r--include/field_effect_helpers.h2
-rw-r--r--include/field_weather.h2
-rw-r--r--include/global.fieldmap.h12
-rw-r--r--include/global.h4
-rw-r--r--ld_script.txt4
-rw-r--r--src/field_effect.c24
-rw-r--r--src/field_effect_helpers.c1411
-rw-r--r--src/quest_log_objects.c22
-rw-r--r--src/quest_log_player.c10
19 files changed, 1543 insertions, 4467 deletions
diff --git a/asm/event_object_movement.s b/asm/event_object_movement.s
index cf5b8c54d..e9ddd9ebc 100644
--- a/asm/event_object_movement.s
+++ b/asm/event_object_movement.s
@@ -1084,7 +1084,7 @@ _0805E5CA:
ldrh r0, [r6, 0x2]
lsls r1, 28
lsrs r1, 28
- bl npc_load_two_palettes__no_record
+ bl LoadPlayerObjectReflectionPalette
b _0805E606
.align 2, 0
_0805E5F4: .4byte gObjectEvents
@@ -1094,7 +1094,7 @@ _0805E5F8:
ldrh r0, [r6, 0x2]
lsls r1, 28
lsrs r1, 28
- bl npc_load_two_palettes__and_record
+ bl LoadSpecialObjectReflectionPalette
_0805E606:
ldrb r0, [r5, 0x6]
cmp r0, 0x4C
@@ -1728,7 +1728,7 @@ sprite_new: @ 805E9F8
ldrh r0, [r4, 0x2]
lsls r1, 28
lsrs r1, 28
- bl npc_load_two_palettes__and_record
+ bl LoadSpecialObjectReflectionPalette
_0805EAE4:
ldr r1, [sp, 0x1C]
cmp r1, 0
@@ -1852,7 +1852,7 @@ sub_805EB44: @ 805EB44
ldrh r0, [r7, 0x2]
lsls r1, 28
lsrs r1, 28
- bl npc_load_two_palettes__and_record
+ bl LoadSpecialObjectReflectionPalette
_0805EBE6:
ldr r1, [sp, 0x18]
cmp r1, 0
@@ -2239,7 +2239,7 @@ _0805EE70:
ldrh r0, [r5, 0x2]
lsls r1, 28
lsrs r1, 28
- bl npc_load_two_palettes__no_record
+ bl LoadPlayerObjectReflectionPalette
_0805EECA:
ldrb r0, [r5, 0xC]
lsls r1, r0, 28
@@ -2248,7 +2248,7 @@ _0805EECA:
bls _0805EEDC
ldrh r0, [r5, 0x2]
lsrs r1, 28
- bl npc_load_two_palettes__and_record
+ bl LoadSpecialObjectReflectionPalette
_0805EEDC:
mov r0, sp
strh r4, [r0, 0x2]
@@ -2315,7 +2315,7 @@ _0805EEDC:
mov r0, r8
adds r1, r7, 0
bl SetPlayerAvatarObjectEventIdAndObjectId
- bl sub_80DB0C4
+ bl CreateWarpArrowSprite
strb r0, [r6, 0x1B]
_0805EF6A:
ldr r1, [sp, 0x20]
@@ -2470,7 +2470,7 @@ ObjectEventSetGraphicsId: @ 805F060
ldrh r0, [r5, 0x2]
lsls r1, 28
lsrs r1, 28
- bl pal_patch_for_npc
+ bl PatchObjectPalette
_0805F09E:
ldrb r1, [r5, 0xC]
mov r0, r8
@@ -2480,7 +2480,7 @@ _0805F09E:
ldrh r0, [r5, 0x2]
lsls r1, 28
lsrs r1, 28
- bl npc_load_two_palettes__and_record
+ bl LoadSpecialObjectReflectionPalette
_0805F0B2:
ldr r0, [r4, 0xC]
ldrh r0, [r0, 0x4]
@@ -2583,7 +2583,7 @@ _0805F152:
adds r2, 0x20
adds r3, r4, 0
adds r3, 0x22
- bl sub_8063B1C
+ bl SetSpritePosToMapCoords
ldrh r0, [r5, 0x8]
lsls r0, 16
asrs r0, 17
@@ -3107,8 +3107,8 @@ _0805F530:
bx r1
thumb_func_end sub_805F510
- thumb_func_start pal_patch_for_npc
-pal_patch_for_npc: @ 805F538
+ thumb_func_start PatchObjectPalette
+PatchObjectPalette: @ 805F538
push {r4,lr}
adds r4, r1, 0
lsls r0, 16
@@ -3135,7 +3135,7 @@ pal_patch_for_npc: @ 805F538
bx r0
.align 2, 0
_0805F570: .4byte gObjectEventSpritePalettes
- thumb_func_end pal_patch_for_npc
+ thumb_func_end PatchObjectPalette
thumb_func_start pal_patch_for_npc_range
pal_patch_for_npc_range: @ 805F574
@@ -3150,7 +3150,7 @@ pal_patch_for_npc_range: @ 805F574
_0805F584:
ldrh r0, [r5]
adds r1, r4, 0
- bl pal_patch_for_npc
+ bl PatchObjectPalette
adds r5, 0x2
adds r0, r4, 0x1
lsls r0, 24
@@ -3205,8 +3205,8 @@ _0805F5E2:
bx r1
thumb_func_end FindObjectEventPaletteIndexByTag
- thumb_func_start npc_load_two_palettes__no_record
-npc_load_two_palettes__no_record: @ 805F5E8
+ thumb_func_start LoadPlayerObjectReflectionPalette
+LoadPlayerObjectReflectionPalette: @ 805F5E8
push {r4-r6,lr}
lsls r0, 16
lsrs r4, r0, 16
@@ -3214,14 +3214,14 @@ npc_load_two_palettes__no_record: @ 805F5E8
lsrs r5, r1, 24
adds r0, r4, 0
adds r1, r5, 0
- bl pal_patch_for_npc
+ bl PatchObjectPalette
movs r3, 0
ldr r1, _0805F630 @ =gUnknown_83A5208
ldrh r0, [r1]
ldr r2, _0805F634 @ =0x000011ff
cmp r0, r2
beq _0805F650
- ldr r0, _0805F638 @ =gUnknown_835B934
+ ldr r0, _0805F638 @ =gReflectionEffectPaletteMap
adds r5, r0
adds r6, r2, 0
_0805F60C:
@@ -3239,12 +3239,12 @@ _0805F60C:
adds r0, r1
ldrh r0, [r0]
ldrb r1, [r5]
- bl pal_patch_for_npc
+ bl PatchObjectPalette
b _0805F650
.align 2, 0
_0805F630: .4byte gUnknown_83A5208
_0805F634: .4byte 0x000011ff
-_0805F638: .4byte gUnknown_835B934
+_0805F638: .4byte gReflectionEffectPaletteMap
_0805F63C: .4byte gUnknown_2037098
_0805F640:
adds r0, r3, 0x1
@@ -3259,10 +3259,10 @@ _0805F650:
pop {r4-r6}
pop {r0}
bx r0
- thumb_func_end npc_load_two_palettes__no_record
+ thumb_func_end LoadPlayerObjectReflectionPalette
- thumb_func_start npc_load_two_palettes__and_record
-npc_load_two_palettes__and_record: @ 805F658
+ thumb_func_start LoadSpecialObjectReflectionPalette
+LoadSpecialObjectReflectionPalette: @ 805F658
push {r4-r6,lr}
lsls r0, 16
lsrs r4, r0, 16
@@ -3272,14 +3272,14 @@ npc_load_two_palettes__and_record: @ 805F658
strh r4, [r0]
adds r0, r4, 0
adds r1, r5, 0
- bl pal_patch_for_npc
+ bl PatchObjectPalette
movs r3, 0
ldr r1, _0805F6A8 @ =gUnknown_83A5278
ldrh r0, [r1]
ldr r2, _0805F6AC @ =0x000011ff
cmp r0, r2
beq _0805F6C8
- ldr r0, _0805F6B0 @ =gUnknown_835B934
+ ldr r0, _0805F6B0 @ =gReflectionEffectPaletteMap
adds r5, r0
adds r6, r2, 0
_0805F680:
@@ -3297,13 +3297,13 @@ _0805F680:
adds r0, r1
ldrh r0, [r0]
ldrb r1, [r5]
- bl pal_patch_for_npc
+ bl PatchObjectPalette
b _0805F6C8
.align 2, 0
_0805F6A4: .4byte gUnknown_203709A
_0805F6A8: .4byte gUnknown_83A5278
_0805F6AC: .4byte 0x000011ff
-_0805F6B0: .4byte gUnknown_835B934
+_0805F6B0: .4byte gReflectionEffectPaletteMap
_0805F6B4: .4byte gUnknown_2037098
_0805F6B8:
adds r0, r3, 0x1
@@ -3318,18 +3318,18 @@ _0805F6C8:
pop {r4-r6}
pop {r0}
bx r0
- thumb_func_end npc_load_two_palettes__and_record
+ thumb_func_end LoadSpecialObjectReflectionPalette
thumb_func_start sub_805F6D0
sub_805F6D0: @ 805F6D0
lsls r0, 24
lsrs r0, 24
- ldr r1, _0805F6DC @ =gUnknown_835B934
+ ldr r1, _0805F6DC @ =gReflectionEffectPaletteMap
adds r0, r1
ldrb r0, [r0]
bx lr
.align 2, 0
-_0805F6DC: .4byte gUnknown_835B934
+_0805F6DC: .4byte gReflectionEffectPaletteMap
thumb_func_end sub_805F6D0
thumb_func_start unref_sub_808EAC4
@@ -3413,7 +3413,7 @@ sub_805F724: @ 805F724
adds r2, 0x20
adds r3, r7, 0
adds r3, 0x22
- bl sub_8063B1C
+ bl SetSpritePosToMapCoords
mov r1, r8
ldrh r0, [r1, 0x8]
lsls r0, 16
@@ -3979,8 +3979,8 @@ _0805FB5E:
bx r1
thumb_func_end CopySprite
- thumb_func_start obj_unfreeze
-obj_unfreeze: @ 805FB6C
+ thumb_func_start CreateCopySpriteAt
+CreateCopySpriteAt: @ 805FB6C
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -4038,7 +4038,7 @@ _0805FBD2:
pop {r4-r7}
pop {r1}
bx r1
- thumb_func_end obj_unfreeze
+ thumb_func_end CreateCopySpriteAt
thumb_func_start ObjectEventSetDirection
ObjectEventSetDirection: @ 805FBDC
@@ -4524,8 +4524,8 @@ _0805FF2A:
_0805FF30: .4byte gUnknown_83A5330
thumb_func_end npc_paltag_set_load
- thumb_func_start npc_paltag_by_palslot
-npc_paltag_by_palslot: @ 805FF34
+ thumb_func_start GetObjectPaletteTag
+GetObjectPaletteTag: @ 805FF34
push {r4-r6,lr}
lsls r0, 24
lsrs r2, r0, 24
@@ -4591,7 +4591,7 @@ _0805FFA2:
_0805FFA8: .4byte gUnknown_83A5278
_0805FFAC: .4byte 0x000011ff
_0805FFB0: .4byte gUnknown_203709A
- thumb_func_end npc_paltag_by_palslot
+ thumb_func_end GetObjectPaletteTag
thumb_func_start sub_805FFB4
sub_805FFB4: @ 805FFB4
@@ -12912,8 +12912,8 @@ _08063B14: .4byte gTotalCameraPixelOffsetX
_08063B18: .4byte gTotalCameraPixelOffsetY
thumb_func_end sub_8063AD4
- thumb_func_start sub_8063B1C
-sub_8063B1C: @ 8063B1C
+ thumb_func_start SetSpritePosToMapCoords
+SetSpritePosToMapCoords: @ 8063B1C
push {r4-r7,lr}
adds r7, r2, 0
mov r12, r3
@@ -12997,7 +12997,7 @@ _08063BB4: .4byte gUnknown_3005050
_08063BB8: .4byte gTotalCameraPixelOffsetY
_08063BBC: .4byte 0xfff00000
_08063BC0: .4byte gSaveBlock1Ptr
- thumb_func_end sub_8063B1C
+ thumb_func_end SetSpritePosToMapCoords
thumb_func_start sub_8063BC4
sub_8063BC4: @ 8063BC4
@@ -13019,7 +13019,7 @@ sub_8063BC4: @ 8063BC4
ldrsh r1, [r2, r3]
adds r2, r6, 0
mov r3, r8
- bl sub_8063B1C
+ bl SetSpritePosToMapCoords
lsls r4, 16
asrs r4, 16
ldrh r0, [r6]
@@ -23568,7 +23568,7 @@ GroundEffect_JumpOnTallGrass: @ 80685FC
movs r7, 0x12
ldrsh r4, [r5, r7]
str r4, [sp]
- bl sub_80DB564
+ bl FindTallGrassFieldEffectSpriteId
lsls r0, 24
lsrs r0, 24
cmp r0, 0x40
diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s
deleted file mode 100644
index 564cc519f..000000000
--- a/asm/field_effect_helpers.s
+++ /dev/null
@@ -1,4308 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start SetUpReflection
-SetUpReflection: @ 80DAD7C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- adds r4, r1, 0
- lsls r5, r2, 24
- lsrs r5, 24
- movs r0, 0x20
- ldrsh r1, [r4, r0]
- movs r0, 0x22
- ldrsh r2, [r4, r0]
- adds r0, r4, 0
- movs r3, 0x98
- bl obj_unfreeze
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _080DAE2C @ =gSprites
- adds r7, r1, r0
- ldr r0, _080DAE30 @ =sub_80DAF50
- str r0, [r7, 0x1C]
- ldrb r1, [r7, 0x5]
- movs r0, 0xC
- orrs r1, r0
- strb r1, [r7, 0x5]
- ldr r2, _080DAE34 @ =gUnknown_835B934
- lsrs r0, r1, 4
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 4
- movs r2, 0xF
- ands r1, r2
- orrs r1, r0
- strb r1, [r7, 0x5]
- movs r1, 0x3F
- adds r1, r7
- mov r8, r1
- ldrb r0, [r1]
- movs r1, 0x40
- orrs r0, r1
- mov r1, r8
- strb r0, [r1]
- ldr r0, _080DAE38 @ =gDummySpriteAnimTable
- str r0, [r7, 0x8]
- adds r0, r7, 0
- movs r1, 0
- bl StartSpriteAnim
- ldr r0, _080DAE3C @ =gDummySpriteAffineAnimTable
- str r0, [r7, 0x10]
- mov r1, r8
- ldrb r0, [r1]
- movs r1, 0x8
- orrs r0, r1
- mov r1, r8
- strb r0, [r1]
- adds r2, r7, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2]
- ldrh r0, [r4, 0x2E]
- strh r0, [r7, 0x2E]
- ldrb r0, [r6, 0x8]
- strh r0, [r7, 0x30]
- strh r5, [r7, 0x3C]
- adds r0, r6, 0
- adds r1, r7, 0
- bl npc_pal_op
- cmp r5, 0
- bne _080DAE22
- ldrb r0, [r7, 0x1]
- movs r1, 0x4
- negs r1, r1
- ands r1, r0
- movs r0, 0x1
- orrs r1, r0
- strb r1, [r7, 0x1]
-_080DAE22:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080DAE2C: .4byte gSprites
-_080DAE30: .4byte sub_80DAF50
-_080DAE34: .4byte gUnknown_835B934
-_080DAE38: .4byte gDummySpriteAnimTable
-_080DAE3C: .4byte gDummySpriteAffineAnimTable
- thumb_func_end SetUpReflection
-
- thumb_func_start sub_80DAE40
-sub_80DAE40: @ 80DAE40
- push {lr}
- ldrb r0, [r0, 0x5]
- bl GetObjectEventGraphicsInfo
- ldrh r0, [r0, 0xA]
- subs r0, 0x2
- lsls r0, 16
- asrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end sub_80DAE40
-
- thumb_func_start npc_pal_op
-npc_pal_op: @ 80DAE54
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- adds r4, r1, 0
- ldr r1, _080DAEAC @ =gUnknown_83FECCC
- mov r0, sp
- movs r2, 0x6
- bl memcpy
- movs r0, 0
- strh r0, [r4, 0x32]
- ldrb r0, [r5, 0x5]
- bl GetObjectEventGraphicsInfo
- ldrb r1, [r0, 0xC]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080DAEB0
- ldrb r0, [r5, 0x1F]
- bl MetatileBehavior_GetBridgeType
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080DAE96
- ldrb r0, [r5, 0x1E]
- bl MetatileBehavior_GetBridgeType
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _080DAEB0
-_080DAE96:
- subs r0, 0x1
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- strh r0, [r4, 0x32]
- ldrb r1, [r4, 0x5]
- lsrs r1, 4
- adds r0, r5, 0
- bl npc_pal_op_A
- b _080DAEBA
- .align 2, 0
-_080DAEAC: .4byte gUnknown_83FECCC
-_080DAEB0:
- ldrb r1, [r4, 0x5]
- lsrs r1, 4
- adds r0, r5, 0
- bl npc_pal_op_B
-_080DAEBA:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end npc_pal_op
-
- thumb_func_start npc_pal_op_B
-npc_pal_op_B: @ 80DAEC4
- push {r4,lr}
- lsls r1, 24
- lsrs r4, r1, 24
- ldrb r0, [r0, 0x5]
- bl GetObjectEventGraphicsInfo
- adds r2, r0, 0
- ldrh r1, [r2, 0x4]
- ldr r0, _080DAEF0 @ =0x000011ff
- cmp r1, r0
- beq _080DAF18
- ldrb r0, [r2, 0xC]
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0
- bne _080DAEF4
- ldrh r0, [r2, 0x2]
- adds r1, r4, 0
- bl npc_load_two_palettes__no_record
- b _080DAF12
- .align 2, 0
-_080DAEF0: .4byte 0x000011ff
-_080DAEF4:
- cmp r1, 0xA
- bne _080DAF02
- ldrh r0, [r2, 0x2]
- adds r1, r4, 0
- bl npc_load_two_palettes__and_record
- b _080DAF12
-_080DAF02:
- adds r0, r4, 0
- bl npc_paltag_by_palslot
- lsls r0, 16
- lsrs r0, 16
- adds r1, r4, 0
- bl pal_patch_for_npc
-_080DAF12:
- adds r0, r4, 0
- bl sub_807AA8C
-_080DAF18:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end npc_pal_op_B
-
- thumb_func_start npc_pal_op_A
-npc_pal_op_A: @ 80DAF20
- push {r4,lr}
- lsls r1, 24
- lsrs r4, r1, 24
- ldrb r0, [r0, 0x5]
- bl GetObjectEventGraphicsInfo
- adds r2, r0, 0
- ldrh r1, [r2, 0x4]
- ldr r0, _080DAF4C @ =0x000011ff
- cmp r1, r0
- beq _080DAF44
- adds r0, r1, 0
- adds r1, r4, 0
- bl pal_patch_for_npc
- adds r0, r4, 0
- bl sub_807AA8C
-_080DAF44:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DAF4C: .4byte 0x000011ff
- thumb_func_end npc_pal_op_A
-
- thumb_func_start sub_80DAF50
-sub_80DAF50: @ 80DAF50
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r4, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DAF98 @ =gObjectEvents
- adds r7, r0, r1
- ldrb r1, [r7, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DAF9C @ =gSprites
- adds r5, r0, r1
- ldr r0, [r7]
- ldr r1, _080DAFA0 @ =0x00020001
- ands r0, r1
- cmp r0, r1
- bne _080DAF88
- ldrb r1, [r7, 0x8]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- cmp r1, r0
- beq _080DAFA4
-_080DAF88:
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- b _080DB0AE
- .align 2, 0
-_080DAF98: .4byte gObjectEvents
-_080DAF9C: .4byte gSprites
-_080DAFA0: .4byte 0x00020001
-_080DAFA4:
- ldr r1, _080DB0BC @ =gUnknown_835B934
- ldrb r0, [r5, 0x5]
- lsrs r0, 4
- adds r0, r1
- ldrb r1, [r0]
- lsls r1, 4
- ldrb r2, [r4, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- ldrb r1, [r5, 0x1]
- lsrs r1, 6
- lsls r1, 6
- ldrb r2, [r4, 0x1]
- movs r3, 0x3F
- adds r0, r3, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r5, 0x3]
- lsrs r0, 6
- lsls r0, 6
- ldrb r2, [r4, 0x3]
- adds r1, r3, 0
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x3]
- ldrb r0, [r5, 0x3]
- lsls r0, 26
- lsrs r0, 27
- movs r2, 0x10
- orrs r0, r2
- lsls r0, 1
- subs r2, 0x4F
- mov r9, r2
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x3]
- ldrh r1, [r5, 0x4]
- lsls r1, 22
- lsrs r1, 22
- ldrh r2, [r4, 0x4]
- ldr r0, _080DB0C0 @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r4, 0x4]
- ldr r0, [r5, 0x18]
- str r0, [r4, 0x18]
- adds r0, r5, 0
- adds r0, 0x42
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 26
- adds r2, r4, 0
- adds r2, 0x42
- ands r3, r0
- ldrb r1, [r2]
- movs r0, 0x40
- negs r0, r0
- ands r0, r1
- orrs r0, r3
- strb r0, [r2]
- movs r0, 0x3E
- adds r0, r5
- mov r8, r0
- ldrb r0, [r0]
- adds r6, r4, 0
- adds r6, 0x3E
- movs r1, 0x4
- ands r1, r0
- ldrb r2, [r6]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r6]
- ldrh r0, [r5, 0x20]
- strh r0, [r4, 0x20]
- adds r0, r7, 0
- bl sub_80DAE40
- ldrh r1, [r5, 0x22]
- adds r0, r1
- ldrh r1, [r4, 0x32]
- adds r1, r0
- strh r1, [r4, 0x22]
- adds r0, r5, 0
- adds r0, 0x28
- ldrb r1, [r0]
- adds r0, r4, 0
- adds r0, 0x28
- strb r1, [r0]
- adds r0, r5, 0
- adds r0, 0x29
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x29
- strb r0, [r1]
- ldrh r0, [r5, 0x24]
- strh r0, [r4, 0x24]
- ldrh r0, [r5, 0x26]
- negs r0, r0
- strh r0, [r4, 0x26]
- mov r2, r8
- ldrb r0, [r2]
- movs r1, 0x2
- ands r1, r0
- ldrb r2, [r6]
- movs r0, 0x3
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r6]
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080DB0AE
- ldrb r0, [r4, 0x3]
- mov r2, r9
- ands r2, r0
- strb r2, [r4, 0x3]
- ldrb r0, [r5, 0x3]
- lsls r0, 26
- lsrs r0, 27
- movs r1, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080DB0AE
- movs r1, 0x2
- adds r0, r2, 0
- orrs r0, r1
- strb r0, [r4, 0x3]
-_080DB0AE:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB0BC: .4byte gUnknown_835B934
-_080DB0C0: .4byte 0xfffffc00
- thumb_func_end sub_80DAF50
-
- thumb_func_start sub_80DB0C4
-sub_80DB0C4: @ 80DB0C4
- push {r4,lr}
- ldr r0, _080DB10C @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x20]
- movs r1, 0
- movs r2, 0
- movs r3, 0x52
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- cmp r0, 0x40
- beq _080DB102
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _080DB110 @ =gSprites
- adds r1, r0
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x2
- orrs r0, r2
- orrs r0, r3
- strb r0, [r1]
-_080DB102:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DB10C: .4byte gFieldEffectObjectTemplatePointers
-_080DB110: .4byte gSprites
- thumb_func_end sub_80DB0C4
-
- thumb_func_start objid_set_invisible
-objid_set_invisible: @ 80DB114
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080DB130 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- bx lr
- .align 2, 0
-_080DB130: .4byte gSprites
- thumb_func_end objid_set_invisible
-
- thumb_func_start sub_80DB134
-sub_80DB134: @ 80DB134
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- lsls r2, 16
- lsrs r7, r2, 16
- lsls r3, 16
- lsrs r6, r3, 16
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- ldr r1, _080DB1D8 @ =gSprites
- adds r2, r0, r1
- adds r0, r2, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _080DB17E
- movs r0, 0x2E
- ldrsh r1, [r2, r0]
- lsls r0, r7, 16
- asrs r0, 16
- cmp r1, r0
- bne _080DB17E
- movs r0, 0x30
- ldrsh r1, [r2, r0]
- lsls r0, r6, 16
- asrs r0, 16
- cmp r1, r0
- beq _080DB1CA
-_080DB17E:
- lsls r0, r7, 16
- asrs r0, 16
- lsls r1, r6, 16
- asrs r1, 16
- mov r4, sp
- adds r4, 0x2
- mov r2, sp
- adds r3, r4, 0
- bl sub_8063B1C
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- ldr r1, _080DB1D8 @ =gSprites
- adds r2, r0, r1
- mov r0, sp
- ldrh r0, [r0]
- adds r0, 0x8
- strh r0, [r2, 0x20]
- ldrh r0, [r4]
- adds r0, 0x8
- strh r0, [r2, 0x22]
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- strh r7, [r2, 0x2E]
- strh r6, [r2, 0x30]
- mov r1, r8
- subs r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- adds r0, r2, 0
- bl StartSpriteAnim
-_080DB1CA:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB1D8: .4byte gSprites
- thumb_func_end sub_80DB134
-
- thumb_func_start oei_shadow
-oei_shadow: @ 80DB1DC
- push {r4,r5,lr}
- ldr r5, _080DB268 @ =gFieldEffectArguments
- ldrb r0, [r5]
- ldrb r1, [r5, 0x4]
- ldrb r2, [r5, 0x8]
- bl GetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080DB26C @ =gObjectEvents
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x5]
- bl GetObjectEventGraphicsInfo
- adds r4, r0, 0
- ldr r2, _080DB270 @ =gFieldEffectObjectTemplatePointers
- ldr r1, _080DB274 @ =gUnknown_83FECD2
- ldrb r0, [r4, 0xC]
- lsls r0, 26
- lsrs r0, 30
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0
- movs r3, 0x94
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _080DB260
- ldr r0, _080DB278 @ =gSprites
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- ldr r0, [r5]
- strh r0, [r2, 0x2E]
- ldr r0, [r5, 0x4]
- strh r0, [r2, 0x30]
- ldr r0, [r5, 0x8]
- strh r0, [r2, 0x32]
- ldrh r1, [r4, 0xA]
- lsls r1, 16
- asrs r1, 17
- ldr r3, _080DB27C @ =gUnknown_83FECD6
- ldrb r0, [r4, 0xC]
- lsls r0, 26
- lsrs r0, 30
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- subs r1, r0
- strh r1, [r2, 0x34]
-_080DB260:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080DB268: .4byte gFieldEffectArguments
-_080DB26C: .4byte gObjectEvents
-_080DB270: .4byte gFieldEffectObjectTemplatePointers
-_080DB274: .4byte gUnknown_83FECD2
-_080DB278: .4byte gSprites
-_080DB27C: .4byte gUnknown_83FECD6
- thumb_func_end oei_shadow
-
- thumb_func_start oamc_shadow
-oamc_shadow: @ 80DB280
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r0, [r5, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r5, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- beq _080DB2AE
- adds r0, r5, 0
- movs r1, 0x3
- bl FieldEffectStop
- b _080DB334
-_080DB2AE:
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DB33C @ =gObjectEvents
- adds r4, r0, r1
- ldrb r0, [r4, 0x4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _080DB340 @ =gSprites
- adds r1, r0
- ldrb r0, [r1, 0x5]
- movs r2, 0xC
- ands r2, r0
- ldrb r3, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r5, 0x5]
- ldrh r0, [r1, 0x20]
- strh r0, [r5, 0x20]
- ldrh r0, [r5, 0x34]
- ldrh r1, [r1, 0x22]
- adds r0, r1
- strh r0, [r5, 0x22]
- ldr r0, [r4]
- ldr r1, _080DB344 @ =0x00400001
- ands r0, r1
- cmp r0, r1
- bne _080DB32C
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsTallGrass
- lsls r0, 24
- cmp r0, 0
- bne _080DB32C
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsSurfable
- lsls r0, 24
- cmp r0, 0
- bne _080DB32C
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_IsSurfable
- lsls r0, 24
- cmp r0, 0
- bne _080DB32C
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsReflective
- lsls r0, 24
- cmp r0, 0
- bne _080DB32C
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_IsReflective
- lsls r0, 24
- cmp r0, 0
- beq _080DB334
-_080DB32C:
- adds r0, r5, 0
- movs r1, 0x3
- bl FieldEffectStop
-_080DB334:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB33C: .4byte gObjectEvents
-_080DB340: .4byte gSprites
-_080DB344: .4byte 0x00400001
- thumb_func_end oamc_shadow
-
- thumb_func_start oei_grass_normal
-oei_grass_normal: @ 80DB348
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r5, _080DB3E0 @ =gFieldEffectArguments
- ldrh r1, [r5]
- mov r0, sp
- strh r1, [r0]
- ldrh r0, [r5, 0x4]
- mov r4, sp
- adds r4, 0x2
- strh r0, [r4]
- mov r0, sp
- adds r1, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DB3E4 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x10]
- mov r1, sp
- movs r2, 0
- ldrsh r1, [r1, r2]
- movs r3, 0
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _080DB3D4
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DB3E8 @ =gSprites
- adds r3, r0, r1
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x3
- ldrb r1, [r5, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x5]
- ldr r0, [r5, 0x8]
- strh r0, [r3, 0x2E]
- ldr r0, [r5]
- strh r0, [r3, 0x30]
- ldr r0, [r5, 0x4]
- strh r0, [r3, 0x32]
- ldr r0, [r5, 0x10]
- strh r0, [r3, 0x34]
- ldr r0, [r5, 0x14]
- strh r0, [r3, 0x36]
- ldr r0, [r5, 0x18]
- strh r0, [r3, 0x38]
- ldr r0, [r5, 0x1C]
- cmp r0, 0
- beq _080DB3D4
- adds r0, r3, 0
- movs r1, 0x4
- bl SeekSpriteAnim
-_080DB3D4:
- movs r0, 0
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080DB3E0: .4byte gFieldEffectArguments
-_080DB3E4: .4byte gFieldEffectObjectTemplatePointers
-_080DB3E8: .4byte gSprites
- thumb_func_end oei_grass_normal
-
- thumb_func_start unc_grass_normal
-unc_grass_normal: @ 80DB3EC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r0, [r5, 0x38]
- lsrs r4, r0, 8
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r3, _080DB498 @ =gCamera
- ldrb r1, [r3]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080DB438
- ldr r0, _080DB49C @ =gSaveBlock1Ptr
- ldr r2, [r0]
- movs r0, 0x5
- ldrsb r0, [r2, r0]
- cmp r0, r4
- bne _080DB41E
- movs r0, 0x4
- ldrsb r0, [r2, r0]
- cmp r0, r7
- beq _080DB438
-_080DB41E:
- ldr r1, [r3, 0x4]
- ldrh r0, [r5, 0x30]
- subs r0, r1
- strh r0, [r5, 0x30]
- ldr r1, [r3, 0x8]
- ldrh r0, [r5, 0x32]
- subs r0, r1
- strh r0, [r5, 0x32]
- ldrb r1, [r2, 0x5]
- lsls r1, 8
- ldrb r0, [r2, 0x4]
- orrs r0, r1
- strh r0, [r5, 0x38]
-_080DB438:
- ldrh r0, [r5, 0x34]
- lsrs r1, r0, 8
- mov r8, r1
- lsls r0, 24
- lsrs r4, r0, 24
- ldrh r0, [r5, 0x36]
- lsls r0, 24
- lsrs r7, r0, 24
- movs r2, 0x30
- ldrsh r0, [r5, r2]
- movs r2, 0x32
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r6, r0, 24
- mov r0, r8
- adds r1, r4, 0
- adds r2, r7, 0
- mov r3, sp
- bl TryGetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _080DB48C
- adds r0, r6, 0
- bl MetatileBehavior_IsTallGrass_2
- lsls r0, 24
- cmp r0, 0
- beq _080DB48C
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _080DB4A0
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080DB4A0
-_080DB48C:
- adds r0, r5, 0
- movs r1, 0x4
- bl FieldEffectStop
- b _080DB4E4
- .align 2, 0
-_080DB498: .4byte gCamera
-_080DB49C: .4byte gSaveBlock1Ptr
-_080DB4A0:
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DB4F0 @ =gObjectEvents
- adds r2, r0, r1
- ldr r0, [r2, 0x10]
- ldr r1, [r5, 0x30]
- cmp r0, r1
- beq _080DB4C0
- ldr r0, [r2, 0x14]
- cmp r0, r1
- beq _080DB4C0
- movs r0, 0x1
- strh r0, [r5, 0x3C]
-_080DB4C0:
- movs r6, 0
- adds r0, r5, 0
- adds r0, 0x2B
- ldrb r0, [r0]
- cmp r0, 0
- bne _080DB4CE
- movs r6, 0x4
-_080DB4CE:
- adds r0, r5, 0
- movs r1, 0
- bl UpdateObjectEventSpriteVisibility
- ldrh r1, [r5, 0x2E]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- adds r2, r6, 0
- bl sub_80DCD48
-_080DB4E4:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB4F0: .4byte gObjectEvents
- thumb_func_end unc_grass_normal
-
- thumb_func_start FldEff_JumpTallGrass
-FldEff_JumpTallGrass: @ 80DB4F4
- push {r4,lr}
- ldr r4, _080DB558 @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0xC
- bl sub_8063BC4
- ldr r0, _080DB55C @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x28]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080DB550
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080DB560 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r4, 0x8]
- strh r0, [r2, 0x2E]
- movs r0, 0xC
- strh r0, [r2, 0x30]
-_080DB550:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DB558: .4byte gFieldEffectArguments
-_080DB55C: .4byte gFieldEffectObjectTemplatePointers
-_080DB560: .4byte gSprites
- thumb_func_end FldEff_JumpTallGrass
-
- thumb_func_start sub_80DB564
-sub_80DB564: @ 80DB564
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r4, [sp, 0x18]
- lsls r0, 24
- lsrs r0, 24
- mov r12, r0
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- movs r5, 0
- ldr r0, _080DB5D4 @ =gSprites
- mov r8, r0
- lsls r3, 16
- asrs r3, 16
- lsls r4, 16
- asrs r4, 16
-_080DB588:
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- mov r1, r8
- adds r2, r0, r1
- adds r0, r2, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _080DB5DC
- ldr r1, [r2, 0x1C]
- ldr r0, _080DB5D8 @ =unc_grass_normal
- cmp r1, r0
- bne _080DB5DC
- movs r1, 0x30
- ldrsh r0, [r2, r1]
- cmp r3, r0
- bne _080DB5DC
- movs r1, 0x32
- ldrsh r0, [r2, r1]
- cmp r4, r0
- bne _080DB5DC
- ldrh r1, [r2, 0x34]
- lsls r0, r1, 16
- asrs r0, 24
- cmp r12, r0
- bne _080DB5DC
- movs r0, 0xFF
- ands r0, r1
- cmp r7, r0
- bne _080DB5DC
- movs r1, 0x36
- ldrsh r0, [r2, r1]
- cmp r6, r0
- bne _080DB5DC
- adds r0, r5, 0
- b _080DB5E8
- .align 2, 0
-_080DB5D4: .4byte gSprites
-_080DB5D8: .4byte unc_grass_normal
-_080DB5DC:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3F
- bls _080DB588
- movs r0, 0x40
-_080DB5E8:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80DB564
-
- thumb_func_start FldEff_LongGrass
-FldEff_LongGrass: @ 80DB5F4
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r5, _080DB690 @ =gFieldEffectArguments
- ldrh r1, [r5]
- mov r0, sp
- strh r1, [r0]
- ldrh r0, [r5, 0x4]
- mov r4, sp
- adds r4, 0x2
- strh r0, [r4]
- mov r0, sp
- adds r1, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DB694 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x3C]
- mov r1, sp
- movs r2, 0
- ldrsh r1, [r1, r2]
- movs r3, 0
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _080DB684
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DB698 @ =gSprites
- adds r4, r0, r1
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r5, 0x8]
- bl ZCoordToPriority
- movs r1, 0x3
- 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]
- ldr r0, [r5, 0x8]
- strh r0, [r4, 0x2E]
- ldr r0, [r5]
- strh r0, [r4, 0x30]
- ldr r0, [r5, 0x4]
- strh r0, [r4, 0x32]
- ldr r0, [r5, 0x10]
- strh r0, [r4, 0x34]
- ldr r0, [r5, 0x14]
- strh r0, [r4, 0x36]
- ldr r0, [r5, 0x18]
- strh r0, [r4, 0x38]
- ldr r0, [r5, 0x1C]
- cmp r0, 0
- beq _080DB684
- adds r0, r4, 0
- movs r1, 0x6
- bl SeekSpriteAnim
-_080DB684:
- movs r0, 0
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080DB690: .4byte gFieldEffectArguments
-_080DB694: .4byte gFieldEffectObjectTemplatePointers
-_080DB698: .4byte gSprites
- thumb_func_end FldEff_LongGrass
-
- thumb_func_start unc_grass_tall
-unc_grass_tall: @ 80DB69C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r0, [r5, 0x38]
- lsrs r7, r0, 8
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r3, _080DB748 @ =gCamera
- ldrb r1, [r3]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080DB6E8
- ldr r0, _080DB74C @ =gSaveBlock1Ptr
- ldr r2, [r0]
- movs r0, 0x5
- ldrsb r0, [r2, r0]
- cmp r0, r7
- bne _080DB6CE
- movs r0, 0x4
- ldrsb r0, [r2, r0]
- cmp r0, r6
- beq _080DB6E8
-_080DB6CE:
- ldr r1, [r3, 0x4]
- ldrh r0, [r5, 0x30]
- subs r0, r1
- strh r0, [r5, 0x30]
- ldr r1, [r3, 0x8]
- ldrh r0, [r5, 0x32]
- subs r0, r1
- strh r0, [r5, 0x32]
- ldrb r1, [r2, 0x5]
- lsls r1, 8
- ldrb r0, [r2, 0x4]
- orrs r0, r1
- strh r0, [r5, 0x38]
-_080DB6E8:
- ldrh r0, [r5, 0x34]
- lsrs r1, r0, 8
- mov r8, r1
- lsls r0, 24
- lsrs r7, r0, 24
- ldrh r0, [r5, 0x36]
- lsls r0, 24
- lsrs r6, r0, 24
- movs r2, 0x30
- ldrsh r0, [r5, r2]
- movs r2, 0x32
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r4, r0, 24
- mov r0, r8
- adds r1, r7, 0
- adds r2, r6, 0
- mov r3, sp
- bl TryGetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _080DB73C
- adds r0, r4, 0
- bl MetatileBehavior_IsLongGrass
- lsls r0, 24
- cmp r0, 0
- beq _080DB73C
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _080DB750
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080DB750
-_080DB73C:
- adds r0, r5, 0
- movs r1, 0x11
- bl FieldEffectStop
- b _080DB786
- .align 2, 0
-_080DB748: .4byte gCamera
-_080DB74C: .4byte gSaveBlock1Ptr
-_080DB750:
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DB794 @ =gObjectEvents
- adds r2, r0, r1
- ldr r0, [r2, 0x10]
- ldr r1, [r5, 0x30]
- cmp r0, r1
- beq _080DB770
- ldr r0, [r2, 0x14]
- cmp r0, r1
- beq _080DB770
- movs r0, 0x1
- strh r0, [r5, 0x3C]
-_080DB770:
- adds r0, r5, 0
- movs r1, 0
- bl UpdateObjectEventSpriteVisibility
- ldrh r1, [r5, 0x2E]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- movs r2, 0
- bl sub_80DCD48
-_080DB786:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB794: .4byte gObjectEvents
- thumb_func_end unc_grass_tall
-
- thumb_func_start FldEff_JumpLongGrass
-FldEff_JumpLongGrass: @ 80DB798
- push {r4,lr}
- ldr r4, _080DB7FC @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DB800 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x40]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080DB7F4
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080DB804 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r4, 0x8]
- strh r0, [r2, 0x2E]
- movs r0, 0x12
- strh r0, [r2, 0x30]
-_080DB7F4:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DB7FC: .4byte gFieldEffectArguments
-_080DB800: .4byte gFieldEffectObjectTemplatePointers
-_080DB804: .4byte gSprites
- thumb_func_end FldEff_JumpLongGrass
-
- thumb_func_start FldEff_ShortGrass
-FldEff_ShortGrass: @ 80DB808
- push {r4-r6,lr}
- ldr r6, _080DB89C @ =gFieldEffectArguments
- ldrb r0, [r6]
- ldrb r1, [r6, 0x4]
- ldrb r2, [r6, 0x8]
- bl GetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _080DB8A0 @ =gObjectEvents
- adds r5, r1, r0
- ldr r0, _080DB8A4 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x78]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080DB894
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r4, _080DB8A8 @ =gSprites
- adds r2, r4
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x5]
- movs r1, 0xC
- ands r1, r0
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r6]
- strh r0, [r2, 0x2E]
- ldr r0, [r6, 0x4]
- strh r0, [r2, 0x30]
- ldr r0, [r6, 0x8]
- strh r0, [r2, 0x32]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r0, [r0, 0x20]
- strh r0, [r2, 0x34]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r0, [r0, 0x22]
- strh r0, [r2, 0x36]
-_080DB894:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080DB89C: .4byte gFieldEffectArguments
-_080DB8A0: .4byte gObjectEvents
-_080DB8A4: .4byte gFieldEffectObjectTemplatePointers
-_080DB8A8: .4byte gSprites
- thumb_func_end FldEff_ShortGrass
-
- thumb_func_start sub_80DB8AC
-sub_80DB8AC: @ 80DB8AC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _080DB8EA
- ldr r5, _080DB8F4 @ =gObjectEvents
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r5
- ldrb r0, [r1, 0x2]
- lsls r0, 29
- cmp r0, 0
- blt _080DB8F8
-_080DB8EA:
- adds r0, r4, 0
- movs r1, 0x29
- bl FieldEffectStop
- b _080DB98E
- .align 2, 0
-_080DB8F4: .4byte gObjectEvents
-_080DB8F8:
- ldrb r0, [r1, 0x5]
- bl GetObjectEventGraphicsInfo
- mov r8, r0
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DB99C @ =gSprites
- adds r6, r0, r1
- ldrh r5, [r6, 0x22]
- ldrh r7, [r6, 0x20]
- movs r0, 0x20
- ldrsh r1, [r6, r0]
- movs r2, 0x34
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _080DB934
- lsls r0, r5, 16
- asrs r0, 16
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- cmp r0, r1
- beq _080DB94E
-_080DB934:
- strh r7, [r4, 0x34]
- strh r5, [r4, 0x36]
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080DB94E
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnim
-_080DB94E:
- strh r7, [r4, 0x20]
- strh r5, [r4, 0x22]
- mov r1, r8
- ldrh r0, [r1, 0xA]
- lsls r0, 16
- asrs r0, 17
- subs r0, 0x8
- strh r0, [r4, 0x26]
- adds r0, r6, 0
- adds r0, 0x43
- ldrb r0, [r0]
- subs r0, 0x1
- adds r1, r4, 0
- adds r1, 0x43
- strb r0, [r1]
- ldrb r0, [r6, 0x5]
- movs r1, 0xC
- ands r1, r0
- ldrb r2, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- adds r0, r6, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- lsls r1, 29
- lsrs r1, 31
- adds r0, r4, 0
- bl UpdateObjectEventSpriteVisibility
-_080DB98E:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080DB99C: .4byte gSprites
- thumb_func_end sub_80DB8AC
-
- thumb_func_start FldEff_SandFootprints
-FldEff_SandFootprints: @ 80DB9A0
- push {r4,lr}
- ldr r4, _080DBA08 @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DBA0C @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x2C]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- ldrb r3, [r4, 0x8]
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _080DB9FE
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DBA10 @ =gSprites
- adds r0, r1
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r3]
- movs r1, 0x3
- ldrb r2, [r4, 0xC]
- ands r2, r1
- lsls r2, 2
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- movs r1, 0xD
- strh r1, [r0, 0x3C]
- ldrb r1, [r4, 0x10]
- bl StartSpriteAnim
-_080DB9FE:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DBA08: .4byte gFieldEffectArguments
-_080DBA0C: .4byte gFieldEffectObjectTemplatePointers
-_080DBA10: .4byte gSprites
- thumb_func_end FldEff_SandFootprints
-
- thumb_func_start FldEff_DeepSandFootprints
-FldEff_DeepSandFootprints: @ 80DBA14
- push {r4,r5,lr}
- ldr r4, _080DBA7C @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DBA80 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x5C]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- ldrb r3, [r4, 0x8]
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- adds r5, r1, 0
- cmp r1, 0x40
- beq _080DBA74
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DBA84 @ =gSprites
- adds r0, r1
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r3]
- movs r1, 0x3
- ldrb r2, [r4, 0xC]
- ands r2, r1
- lsls r2, 2
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- movs r1, 0x18
- strh r1, [r0, 0x3C]
- ldrb r1, [r4, 0x10]
- bl StartSpriteAnim
-_080DBA74:
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080DBA7C: .4byte gFieldEffectArguments
-_080DBA80: .4byte gFieldEffectObjectTemplatePointers
-_080DBA84: .4byte gSprites
- thumb_func_end FldEff_DeepSandFootprints
-
- thumb_func_start FldEff_BikeTireTracks
-FldEff_BikeTireTracks: @ 80DBA88
- push {r4,r5,lr}
- ldr r4, _080DBAF0 @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DBAF4 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x6C]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- ldrb r3, [r4, 0x8]
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- adds r5, r1, 0
- cmp r1, 0x40
- beq _080DBAE8
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DBAF8 @ =gSprites
- adds r0, r1
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r3]
- movs r1, 0x3
- ldrb r2, [r4, 0xC]
- ands r2, r1
- lsls r2, 2
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- movs r1, 0x23
- strh r1, [r0, 0x3C]
- ldrb r1, [r4, 0x10]
- bl StartSpriteAnim
-_080DBAE8:
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080DBAF0: .4byte gFieldEffectArguments
-_080DBAF4: .4byte gFieldEffectObjectTemplatePointers
-_080DBAF8: .4byte gSprites
- thumb_func_end FldEff_BikeTireTracks
-
- thumb_func_start sub_80DBAFC
-sub_80DBAFC: @ 80DBAFC
- push {lr}
- ldr r2, _080DBB14 @ =gUnknown_83FECE0
- 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
-_080DBB14: .4byte gUnknown_83FECE0
- thumb_func_end sub_80DBAFC
-
- thumb_func_start sub_80DBB18
-sub_80DBB18: @ 80DBB18
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- adds r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x28
- ble _080DBB2E
- movs r0, 0x1
- strh r0, [r1, 0x2E]
-_080DBB2E:
- adds r0, r1, 0
- movs r1, 0
- bl UpdateObjectEventSpriteVisibility
- pop {r0}
- bx r0
- thumb_func_end sub_80DBB18
-
- thumb_func_start sub_80DBB3C
-sub_80DBB3C: @ 80DBB3C
- push {r4,lr}
- adds r4, r0, 0
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
- ldrb r1, [r3]
- lsls r1, 29
- lsrs r1, 31
- adds r0, r4, 0
- bl UpdateObjectEventSpriteVisibility
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0x38
- ble _080DBB80
- ldrh r1, [r4, 0x3C]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldEffectStop
-_080DBB80:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80DBB3C
-
- thumb_func_start FldEff_Splash
-FldEff_Splash: @ 80DBB88
- push {r4-r6,lr}
- ldr r6, _080DBC1C @ =gFieldEffectArguments
- ldrb r0, [r6]
- ldrb r1, [r6, 0x4]
- ldrb r2, [r6, 0x8]
- bl GetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _080DBC20 @ =gObjectEvents
- adds r5, r1, r0
- ldr r0, _080DBC24 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x34]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x40
- beq _080DBC12
- ldrb r0, [r5, 0x5]
- bl GetObjectEventGraphicsInfo
- lsls r3, r4, 4
- adds r3, r4
- lsls r3, 2
- ldr r4, _080DBC28 @ =gSprites
- adds r3, r4
- movs r1, 0x3E
- adds r1, r3
- mov r12, r1
- ldrb r1, [r1]
- movs r2, 0x2
- orrs r1, r2
- mov r2, r12
- strb r1, [r2]
- ldrb r2, [r5, 0x4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrb r1, [r1, 0x5]
- movs r2, 0xC
- ands r2, r1
- ldrb r4, [r3, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r4
- orrs r1, r2
- strb r1, [r3, 0x5]
- ldr r1, [r6]
- strh r1, [r3, 0x2E]
- ldr r1, [r6, 0x4]
- strh r1, [r3, 0x30]
- ldr r1, [r6, 0x8]
- strh r1, [r3, 0x32]
- ldrh r0, [r0, 0xA]
- lsls r0, 16
- asrs r0, 17
- subs r0, 0x4
- strh r0, [r3, 0x26]
- movs r0, 0x3F
- bl PlaySE
-_080DBC12:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080DBC1C: .4byte gFieldEffectArguments
-_080DBC20: .4byte gObjectEvents
-_080DBC24: .4byte gFieldEffectObjectTemplatePointers
-_080DBC28: .4byte gSprites
- thumb_func_end FldEff_Splash
-
- thumb_func_start sub_80DBC2C
-sub_80DBC2C: @ 80DBC2C
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _080DBC5C
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- beq _080DBC66
-_080DBC5C:
- adds r0, r4, 0
- movs r1, 0xF
- bl FieldEffectStop
- b _080DBCA6
-_080DBC66:
- ldr r3, _080DBCB0 @ =gSprites
- ldr r2, _080DBCB4 @ =gObjectEvents
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x20]
- strh r0, [r4, 0x20]
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x22]
- strh r0, [r4, 0x22]
- adds r0, r4, 0
- movs r1, 0
- bl UpdateObjectEventSpriteVisibility
-_080DBCA6:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DBCB0: .4byte gSprites
-_080DBCB4: .4byte gObjectEvents
- thumb_func_end sub_80DBC2C
-
- thumb_func_start FldEff_JumpSmallSplash
-FldEff_JumpSmallSplash: @ 80DBCB8
- push {r4,lr}
- ldr r4, _080DBD1C @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0xC
- bl sub_8063BC4
- ldr r0, _080DBD20 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x38]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080DBD14
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080DBD24 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r4, 0x8]
- strh r0, [r2, 0x2E]
- movs r0, 0x10
- strh r0, [r2, 0x30]
-_080DBD14:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DBD1C: .4byte gFieldEffectArguments
-_080DBD20: .4byte gFieldEffectObjectTemplatePointers
-_080DBD24: .4byte gSprites
- thumb_func_end FldEff_JumpSmallSplash
-
- thumb_func_start oei_water_drop_tall
-oei_water_drop_tall: @ 80DBD28
- push {r4,lr}
- ldr r4, _080DBD8C @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DBD90 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x30]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080DBD84
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080DBD94 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r4, 0x8]
- strh r0, [r2, 0x2E]
- movs r0, 0xE
- strh r0, [r2, 0x30]
-_080DBD84:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DBD8C: .4byte gFieldEffectArguments
-_080DBD90: .4byte gFieldEffectObjectTemplatePointers
-_080DBD94: .4byte gSprites
- thumb_func_end oei_water_drop_tall
-
- thumb_func_start FldEff_FeetInFlowingWater
-FldEff_FeetInFlowingWater: @ 80DBD98
- push {r4-r7,lr}
- ldr r7, _080DBE38 @ =gFieldEffectArguments
- ldrb r0, [r7]
- ldrb r1, [r7, 0x4]
- ldrb r2, [r7, 0x8]
- bl GetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _080DBE3C @ =gObjectEvents
- adds r6, r1, r0
- ldr r0, _080DBE40 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x34]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x40
- beq _080DBE2E
- ldrb r0, [r6, 0x5]
- bl GetObjectEventGraphicsInfo
- adds r4, r0, 0
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- ldr r3, _080DBE44 @ =gSprites
- adds r0, r3
- ldr r1, _080DBE48 @ =sub_80DBE50
- str r1, [r0, 0x1C]
- adds r5, r0, 0
- adds r5, 0x3E
- ldrb r1, [r5]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r5]
- ldrb r2, [r6, 0x4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r3
- ldrb r1, [r1, 0x5]
- movs r2, 0xC
- ands r2, r1
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- ldr r1, [r7]
- strh r1, [r0, 0x2E]
- ldr r1, [r7, 0x4]
- strh r1, [r0, 0x30]
- ldr r1, [r7, 0x8]
- strh r1, [r0, 0x32]
- ldr r1, _080DBE4C @ =0x0000ffff
- strh r1, [r0, 0x34]
- movs r1, 0x1
- negs r1, r1
- strh r1, [r0, 0x36]
- ldrh r1, [r4, 0xA]
- lsls r1, 16
- asrs r1, 17
- subs r1, 0x4
- strh r1, [r0, 0x26]
- movs r1, 0x1
- bl StartSpriteAnim
-_080DBE2E:
- movs r0, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080DBE38: .4byte gFieldEffectArguments
-_080DBE3C: .4byte gObjectEvents
-_080DBE40: .4byte gFieldEffectObjectTemplatePointers
-_080DBE44: .4byte gSprites
-_080DBE48: .4byte sub_80DBE50
-_080DBE4C: .4byte 0x0000ffff
- thumb_func_end FldEff_FeetInFlowingWater
-
- thumb_func_start sub_80DBE50
-sub_80DBE50: @ 80DBE50
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _080DBE8A
- ldr r2, _080DBE94 @ =gObjectEvents
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r5, r0, r2
- ldrb r0, [r5, 0x2]
- lsls r0, 28
- cmp r0, 0
- blt _080DBE98
-_080DBE8A:
- adds r0, r4, 0
- movs r1, 0x22
- bl FieldEffectStop
- b _080DBEE2
- .align 2, 0
-_080DBE94: .4byte gObjectEvents
-_080DBE98:
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DBEEC @ =gSprites
- adds r0, r1
- ldrh r1, [r0, 0x20]
- strh r1, [r4, 0x20]
- ldrh r1, [r0, 0x22]
- strh r1, [r4, 0x22]
- adds r0, 0x43
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x43
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0
- bl UpdateObjectEventSpriteVisibility
- ldr r1, [r5, 0x10]
- ldr r0, [r4, 0x34]
- cmp r1, r0
- beq _080DBEE2
- ldrh r0, [r5, 0x10]
- strh r0, [r4, 0x34]
- ldrh r0, [r5, 0x12]
- strh r0, [r4, 0x36]
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _080DBEE2
- movs r0, 0x3F
- bl PlaySE
-_080DBEE2:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DBEEC: .4byte gSprites
- thumb_func_end sub_80DBE50
-
- thumb_func_start oei_ripples
-oei_ripples: @ 80DBEF0
- push {r4,lr}
- ldr r0, _080DBF44 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x14]
- ldr r4, _080DBF48 @ =gFieldEffectArguments
- 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
- cmp r0, 0x40
- beq _080DBF3C
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080DBF4C @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- movs r0, 0x5
- strh r0, [r2, 0x2E]
-_080DBF3C:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DBF44: .4byte gFieldEffectObjectTemplatePointers
-_080DBF48: .4byte gFieldEffectArguments
-_080DBF4C: .4byte gSprites
- thumb_func_end oei_ripples
-
- thumb_func_start FldEff_HotSpringsWater
-FldEff_HotSpringsWater: @ 80DBF50
- push {r4-r6,lr}
- ldr r6, _080DBFE4 @ =gFieldEffectArguments
- ldrb r0, [r6]
- ldrb r1, [r6, 0x4]
- ldrb r2, [r6, 0x8]
- bl GetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _080DBFE8 @ =gObjectEvents
- adds r5, r1, r0
- ldr r0, _080DBFEC @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x7C]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080DBFDC
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r4, _080DBFF0 @ =gSprites
- adds r2, r4
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x5]
- movs r1, 0xC
- ands r1, r0
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r6]
- strh r0, [r2, 0x2E]
- ldr r0, [r6, 0x4]
- strh r0, [r2, 0x30]
- ldr r0, [r6, 0x8]
- strh r0, [r2, 0x32]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r0, [r0, 0x20]
- strh r0, [r2, 0x34]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r0, [r0, 0x22]
- strh r0, [r2, 0x36]
-_080DBFDC:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080DBFE4: .4byte gFieldEffectArguments
-_080DBFE8: .4byte gObjectEvents
-_080DBFEC: .4byte gFieldEffectObjectTemplatePointers
-_080DBFF0: .4byte gSprites
- thumb_func_end FldEff_HotSpringsWater
-
- thumb_func_start sub_80DBFF4
-sub_80DBFF4: @ 80DBFF4
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _080DC02E
- ldr r5, _080DC038 @ =gObjectEvents
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r5
- ldrb r0, [r1, 0x2]
- lsls r0, 26
- cmp r0, 0
- blt _080DC03C
-_080DC02E:
- adds r0, r4, 0
- movs r1, 0x2A
- bl FieldEffectStop
- b _080DC080
- .align 2, 0
-_080DC038: .4byte gObjectEvents
-_080DC03C:
- ldrb r0, [r1, 0x5]
- bl GetObjectEventGraphicsInfo
- mov r1, sp
- ldrb r2, [r1]
- lsls r1, r2, 3
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- ldr r2, _080DC088 @ =gSprites
- adds r1, r2
- ldrh r2, [r1, 0x20]
- strh r2, [r4, 0x20]
- ldrh r0, [r0, 0xA]
- lsls r0, 16
- asrs r0, 17
- ldrh r2, [r1, 0x22]
- adds r0, r2
- subs r0, 0x8
- strh r0, [r4, 0x22]
- adds r1, 0x43
- ldrb r0, [r1]
- subs r0, 0x1
- adds r1, r4, 0
- adds r1, 0x43
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0
- bl UpdateObjectEventSpriteVisibility
-_080DC080:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DC088: .4byte gSprites
- thumb_func_end sub_80DBFF4
-
- thumb_func_start FldEff_Unknown19
-FldEff_Unknown19: @ 80DC08C
- push {r4,lr}
- ldr r4, _080DC0EC @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DC0F0 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x44]
- 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
- cmp r0, 0x40
- beq _080DC0E4
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080DC0F4 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- movs r0, 0x13
- strh r0, [r2, 0x2E]
-_080DC0E4:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DC0EC: .4byte gFieldEffectArguments
-_080DC0F0: .4byte gFieldEffectObjectTemplatePointers
-_080DC0F4: .4byte gSprites
- thumb_func_end FldEff_Unknown19
-
- thumb_func_start FldEff_Unknown20
-FldEff_Unknown20: @ 80DC0F8
- push {r4,lr}
- ldr r4, _080DC158 @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DC15C @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x48]
- 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
- cmp r0, 0x40
- beq _080DC150
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080DC160 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- movs r0, 0x14
- strh r0, [r2, 0x2E]
-_080DC150:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DC158: .4byte gFieldEffectArguments
-_080DC15C: .4byte gFieldEffectObjectTemplatePointers
-_080DC160: .4byte gSprites
- thumb_func_end FldEff_Unknown20
-
- thumb_func_start FldEff_Unknown21
-FldEff_Unknown21: @ 80DC164
- push {r4,lr}
- ldr r4, _080DC1C4 @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DC1C8 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x4C]
- 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
- cmp r0, 0x40
- beq _080DC1BC
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080DC1CC @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- movs r0, 0x15
- strh r0, [r2, 0x2E]
-_080DC1BC:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DC1C4: .4byte gFieldEffectArguments
-_080DC1C8: .4byte gFieldEffectObjectTemplatePointers
-_080DC1CC: .4byte gSprites
- thumb_func_end FldEff_Unknown21
-
- thumb_func_start FldEff_Unknown22
-FldEff_Unknown22: @ 80DC1D0
- push {r4,lr}
- ldr r4, _080DC230 @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DC234 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x50]
- 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
- cmp r0, 0x40
- beq _080DC228
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080DC238 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- movs r0, 0x16
- strh r0, [r2, 0x2E]
-_080DC228:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DC230: .4byte gFieldEffectArguments
-_080DC234: .4byte gFieldEffectObjectTemplatePointers
-_080DC238: .4byte gSprites
- thumb_func_end FldEff_Unknown22
-
- thumb_func_start StartAshFieldEffect
-StartAshFieldEffect: @ 80DC23C
- push {r4,lr}
- lsls r2, 16
- lsrs r2, 16
- ldr r4, _080DC26C @ =gFieldEffectArguments
- lsls r0, 16
- asrs r0, 16
- str r0, [r4]
- lsls r1, 16
- asrs r1, 16
- str r1, [r4, 0x4]
- movs r0, 0x52
- str r0, [r4, 0x8]
- movs r0, 0x1
- str r0, [r4, 0xC]
- str r2, [r4, 0x10]
- lsls r3, 16
- asrs r3, 16
- str r3, [r4, 0x14]
- movs r0, 0x7
- bl FieldEffectStart
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DC26C: .4byte gFieldEffectArguments
- thumb_func_end StartAshFieldEffect
-
- thumb_func_start FldEff_Ash
-FldEff_Ash: @ 80DC270
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r5, _080DC2F0 @ =gFieldEffectArguments
- ldrh r1, [r5]
- mov r0, sp
- strh r1, [r0]
- ldrh r0, [r5, 0x4]
- mov r4, sp
- adds r4, 0x2
- strh r0, [r4]
- mov r0, sp
- adds r1, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DC2F4 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x18]
- mov r1, sp
- movs r2, 0
- ldrsh r1, [r1, r2]
- movs r3, 0
- ldrsh r2, [r4, r3]
- ldrb r3, [r5, 0x8]
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080DC2E6
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080DC2F8 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r5, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r5]
- strh r0, [r2, 0x30]
- ldr r0, [r5, 0x4]
- strh r0, [r2, 0x32]
- ldr r0, [r5, 0x10]
- strh r0, [r2, 0x34]
- ldr r0, [r5, 0x14]
- strh r0, [r2, 0x36]
-_080DC2E6:
- movs r0, 0
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080DC2F0: .4byte gFieldEffectArguments
-_080DC2F4: .4byte gFieldEffectObjectTemplatePointers
-_080DC2F8: .4byte gSprites
- thumb_func_end FldEff_Ash
-
- thumb_func_start sub_80DC2FC
-sub_80DC2FC: @ 80DC2FC
- push {lr}
- ldr r2, _080DC314 @ =gUnknown_83FECE8
- 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
-_080DC314: .4byte gUnknown_83FECE8
- thumb_func_end sub_80DC2FC
-
- thumb_func_start sub_80DC318
-sub_80DC318: @ 80DC318
- push {lr}
- adds r3, r0, 0
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- subs r2, 0x12
- ldrb r0, [r2]
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2]
- ldrh r0, [r3, 0x36]
- subs r0, 0x1
- strh r0, [r3, 0x36]
- lsls r0, 16
- cmp r0, 0
- bne _080DC342
- movs r0, 0x1
- strh r0, [r3, 0x2E]
-_080DC342:
- pop {r0}
- bx r0
- thumb_func_end sub_80DC318
-
- thumb_func_start sub_80DC348
-sub_80DC348: @ 80DC348
- push {r4,lr}
- adds r4, r0, 0
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- subs r2, 0x12
- ldrb r1, [r2]
- movs r0, 0x41
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r2, 0x32
- ldrsh r1, [r4, r2]
- ldrh r2, [r4, 0x34]
- bl MapGridSetMetatileIdAt
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r2, 0x32
- ldrsh r1, [r4, r2]
- bl CurrentMapDrawMetatileAt
- ldr r2, _080DC3A0 @ =gObjectEvents
- ldr r0, _080DC3A4 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- movs r0, 0x2
- strh r0, [r4, 0x2E]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DC3A0: .4byte gObjectEvents
-_080DC3A4: .4byte gPlayerAvatar
- thumb_func_end sub_80DC348
-
- thumb_func_start sub_80DC3A8
-sub_80DC3A8: @ 80DC3A8
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0
- bl UpdateObjectEventSpriteVisibility
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080DC3C8
- adds r0, r4, 0
- movs r1, 0x7
- bl FieldEffectStop
-_080DC3C8:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80DC3A8
-
- thumb_func_start FldEff_SurfBlob
-FldEff_SurfBlob: @ 80DC3D0
- push {r4,r5,lr}
- ldr r4, _080DC43C @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DC440 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x1C]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0x96
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- cmp r0, 0x40
- beq _080DC42C
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _080DC444 @ =gSprites
- adds r1, r0
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r3]
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- strb r0, [r1, 0x5]
- ldr r0, [r4, 0x8]
- movs r2, 0
- strh r0, [r1, 0x32]
- strh r2, [r1, 0x34]
- ldr r0, _080DC448 @ =0x0000ffff
- strh r0, [r1, 0x3A]
- movs r0, 0x1
- negs r0, r0
- strh r0, [r1, 0x3C]
-_080DC42C:
- movs r0, 0x8
- bl FieldEffectActiveListRemove
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080DC43C: .4byte gFieldEffectArguments
-_080DC440: .4byte gFieldEffectObjectTemplatePointers
-_080DC444: .4byte gSprites
-_080DC448: .4byte 0x0000ffff
- thumb_func_end FldEff_SurfBlob
-
- thumb_func_start sub_80DC44C
-sub_80DC44C: @ 80DC44C
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- ldr r3, _080DC474 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- ldrh r0, [r2, 0x2E]
- movs r3, 0x10
- negs r3, r3
- ands r3, r0
- movs r0, 0xF0
- lsls r0, 20
- ands r0, r1
- lsrs r0, 24
- orrs r0, r3
- strh r0, [r2, 0x2E]
- bx lr
- .align 2, 0
-_080DC474: .4byte gSprites
- thumb_func_end sub_80DC44C
-
- thumb_func_start sub_80DC478
-sub_80DC478: @ 80DC478
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- ldr r3, _080DC4A0 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- ldrh r0, [r2, 0x2E]
- movs r3, 0xF1
- negs r3, r3
- ands r3, r0
- movs r0, 0xF0
- lsls r0, 20
- ands r0, r1
- lsrs r0, 20
- orrs r3, r0
- strh r3, [r2, 0x2E]
- bx lr
- .align 2, 0
-_080DC4A0: .4byte gSprites
- thumb_func_end sub_80DC478
-
- thumb_func_start sub_80DC4A4
-sub_80DC4A4: @ 80DC4A4
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- ldr r4, _080DC4D0 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r3, r4
- ldrh r0, [r3, 0x2E]
- ldr r4, _080DC4D4 @ =0xfffff0ff
- ands r4, r0
- movs r0, 0xF0
- lsls r0, 20
- ands r0, r1
- lsrs r0, 16
- orrs r4, r0
- strh r4, [r3, 0x2E]
- strh r2, [r3, 0x30]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DC4D0: .4byte gSprites
-_080DC4D4: .4byte 0xfffff0ff
- thumb_func_end sub_80DC4A4
-
- thumb_func_start sub_80DC4D8
-sub_80DC4D8: @ 80DC4D8
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF
- ands r0, r1
- bx lr
- thumb_func_end sub_80DC4D8
-
- thumb_func_start sub_80DC4E0
-sub_80DC4E0: @ 80DC4E0
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF0
- ands r0, r1
- lsrs r0, 4
- bx lr
- thumb_func_end sub_80DC4E0
-
- thumb_func_start sub_80DC4EC
-sub_80DC4EC: @ 80DC4EC
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF0
- lsls r0, 4
- ands r0, r1
- lsrs r0, 8
- bx lr
- thumb_func_end sub_80DC4EC
-
- thumb_func_start sub_80DC4F8
-sub_80DC4F8: @ 80DC4F8
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r1, 0x32
- ldrsh r0, [r6, r1]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _080DC548 @ =gObjectEvents
- adds r4, r0
- ldrb r0, [r4, 0x4]
- lsls r5, r0, 4
- adds r5, r0
- lsls r5, 2
- ldr r0, _080DC54C @ =gSprites
- adds r5, r0
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_80DC550
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_80DC588
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r6, 0
- bl sub_80DC61C
- ldrb r0, [r5, 0x5]
- movs r1, 0xC
- ands r1, r0
- ldrb r2, [r6, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r6, 0x5]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080DC548: .4byte gObjectEvents
-_080DC54C: .4byte gSprites
- thumb_func_end sub_80DC4F8
-
- thumb_func_start sub_80DC550
-sub_80DC550: @ 80DC550
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- adds r4, r1, 0
- ldr r1, _080DC584 @ =gUnknown_83FECF4
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- adds r0, r4, 0
- bl sub_80DC4E0
- lsls r0, 24
- cmp r0, 0
- bne _080DC57C
- ldrb r0, [r5, 0x18]
- lsrs r0, 4
- add r0, sp
- ldrb r1, [r0]
- adds r0, r4, 0
- bl StartSpriteAnimIfDifferent
-_080DC57C:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DC584: .4byte gUnknown_83FECF4
- thumb_func_end sub_80DC550
-
- thumb_func_start sub_80DC588
-sub_80DC588: @ 80DC588
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r4, r1, 0
- ldrh r2, [r0, 0x10]
- mov r1, sp
- strh r2, [r1]
- ldrh r1, [r0, 0x12]
- mov r0, sp
- adds r0, 0x2
- strh r1, [r0]
- movs r2, 0x26
- ldrsh r3, [r4, r2]
- mov r8, r0
- cmp r3, 0
- bne _080DC610
- mov r0, sp
- movs r5, 0
- ldrsh r2, [r0, r5]
- movs r5, 0x3A
- ldrsh r0, [r4, r5]
- cmp r2, r0
- bne _080DC5C4
- lsls r0, r1, 16
- asrs r0, 16
- movs r5, 0x3C
- ldrsh r1, [r4, r5]
- cmp r0, r1
- beq _080DC610
-_080DC5C4:
- strh r3, [r4, 0x38]
- strh r2, [r4, 0x3A]
- mov r1, r8
- movs r2, 0
- ldrsh r0, [r1, r2]
- strh r0, [r4, 0x3C]
- movs r5, 0x1
- mov r7, r8
- mov r6, sp
-_080DC5D6:
- adds r0, r5, 0
- mov r1, sp
- adds r2, r7, 0
- bl MoveCoords
- movs r1, 0
- ldrsh r0, [r6, r1]
- movs r2, 0
- ldrsh r1, [r7, r2]
- bl MapGridGetZCoordAt
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _080DC5FC
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- b _080DC610
-_080DC5FC:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldrh r0, [r4, 0x3A]
- strh r0, [r6]
- ldrh r0, [r4, 0x3C]
- mov r1, r8
- strh r0, [r1]
- cmp r5, 0x4
- bls _080DC5D6
-_080DC610:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80DC588
-
- thumb_func_start sub_80DC61C
-sub_80DC61C: @ 80DC61C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r1, 0
- adds r4, r2, 0
- ldr r1, _080DC680 @ =gUnknown_83FECFA
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- adds r0, r4, 0
- bl sub_80DC4D8
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- cmp r2, 0
- beq _080DC6A6
- ldrh r1, [r4, 0x36]
- adds r1, 0x1
- strh r1, [r4, 0x36]
- movs r3, 0x38
- ldrsh r0, [r4, r3]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _080DC65C
- ldrh r0, [r4, 0x34]
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
-_080DC65C:
- ldrh r1, [r4, 0x36]
- movs r0, 0x1F
- ands r0, r1
- cmp r0, 0
- bne _080DC66C
- ldrh r0, [r4, 0x34]
- negs r0, r0
- strh r0, [r4, 0x34]
-_080DC66C:
- cmp r2, 0x2
- beq _080DC6A6
- adds r0, r4, 0
- bl sub_80DC4EC
- lsls r0, 24
- cmp r0, 0
- bne _080DC684
- ldrh r0, [r4, 0x26]
- b _080DC68A
- .align 2, 0
-_080DC680: .4byte gUnknown_83FECFA
-_080DC684:
- ldrh r0, [r4, 0x26]
- ldrh r3, [r4, 0x30]
- adds r0, r3
-_080DC68A:
- strh r0, [r5, 0x26]
- adds r0, r4, 0
- adds r0, 0x2B
- ldrb r0, [r0]
- cmp r0, 0
- beq _080DC69C
- ldrh r0, [r5, 0x26]
- adds r0, 0x1
- strh r0, [r5, 0x26]
-_080DC69C:
- ldrh r0, [r5, 0x20]
- strh r0, [r4, 0x20]
- ldrh r0, [r5, 0x22]
- adds r0, 0x8
- strh r0, [r4, 0x22]
-_080DC6A6:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80DC61C
-
- thumb_func_start sub_80DC6B0
-sub_80DC6B0: @ 80DC6B0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080DC6F4 @ =gDummySpriteTemplate
- movs r1, 0
- movs r2, 0
- movs r3, 0xFF
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r1, _080DC6F8 @ =gSprites
- adds r2, r1
- ldr r1, _080DC6FC @ =sub_80DC700
- str r1, [r2, 0x1C]
- movs r1, 0x3E
- adds r1, r2
- mov r12, r1
- ldrb r1, [r1]
- movs r3, 0x4
- orrs r1, r3
- mov r3, r12
- strb r1, [r3]
- strh r4, [r2, 0x2E]
- movs r1, 0x1
- strh r1, [r2, 0x30]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DC6F4: .4byte gDummySpriteTemplate
-_080DC6F8: .4byte gSprites
-_080DC6FC: .4byte sub_80DC700
- thumb_func_end sub_80DC6B0
-
- thumb_func_start sub_80DC700
-sub_80DC700: @ 80DC700
- push {lr}
- adds r2, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DC73C @ =gSprites
- adds r3, r0, r1
- ldrh r1, [r2, 0x32]
- adds r0, r1, 0x1
- strh r0, [r2, 0x32]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- bne _080DC728
- ldrh r0, [r2, 0x30]
- ldrh r1, [r3, 0x26]
- adds r0, r1
- strh r0, [r3, 0x26]
-_080DC728:
- ldrh r1, [r2, 0x32]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0
- bne _080DC738
- ldrh r0, [r2, 0x30]
- negs r0, r0
- strh r0, [r2, 0x30]
-_080DC738:
- pop {r0}
- bx r0
- .align 2, 0
-_080DC73C: .4byte gSprites
- thumb_func_end sub_80DC700
-
- thumb_func_start FldEff_Dust
-FldEff_Dust: @ 80DC740
- push {r4,lr}
- ldr r4, _080DC7A4 @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0xC
- bl sub_8063BC4
- ldr r0, _080DC7A8 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x24]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080DC79C
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080DC7AC @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r4, 0x8]
- strh r0, [r2, 0x2E]
- movs r0, 0xA
- strh r0, [r2, 0x30]
-_080DC79C:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DC7A4: .4byte gFieldEffectArguments
-_080DC7A8: .4byte gFieldEffectObjectTemplatePointers
-_080DC7AC: .4byte gSprites
- thumb_func_end FldEff_Dust
-
- thumb_func_start FldEff_SandPile
-FldEff_SandPile: @ 80DC7B0
- push {r4-r7,lr}
- ldr r7, _080DC85C @ =gFieldEffectArguments
- ldrb r0, [r7]
- ldrb r1, [r7, 0x4]
- ldrb r2, [r7, 0x8]
- bl GetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _080DC860 @ =gObjectEvents
- adds r6, r1, r0
- ldr r0, _080DC864 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x74]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x40
- beq _080DC854
- ldrb r0, [r6, 0x5]
- bl GetObjectEventGraphicsInfo
- adds r5, r0, 0
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r4, _080DC868 @ =gSprites
- adds r0, r4
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r3]
- ldrb r2, [r6, 0x4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrb r1, [r1, 0x5]
- movs r2, 0xC
- ands r2, r1
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- ldr r1, [r7]
- strh r1, [r0, 0x2E]
- ldr r1, [r7, 0x4]
- strh r1, [r0, 0x30]
- ldr r1, [r7, 0x8]
- strh r1, [r0, 0x32]
- ldrb r2, [r6, 0x4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x20]
- strh r1, [r0, 0x34]
- ldrb r2, [r6, 0x4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x22]
- strh r1, [r0, 0x36]
- ldrh r1, [r5, 0xA]
- lsls r1, 16
- asrs r1, 17
- subs r1, 0x2
- strh r1, [r0, 0x26]
- movs r1, 0x2
- bl SeekSpriteAnim
-_080DC854:
- movs r0, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080DC85C: .4byte gFieldEffectArguments
-_080DC860: .4byte gObjectEvents
-_080DC864: .4byte gFieldEffectObjectTemplatePointers
-_080DC868: .4byte gSprites
- thumb_func_end FldEff_SandPile
-
- thumb_func_start sub_80DC86C
-sub_80DC86C: @ 80DC86C
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _080DC8A6
- ldr r2, _080DC8B0 @ =gObjectEvents
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- ldrb r0, [r1, 0x2]
- lsls r0, 27
- cmp r0, 0
- blt _080DC8B4
-_080DC8A6:
- adds r0, r4, 0
- movs r1, 0x27
- bl FieldEffectStop
- b _080DC926
- .align 2, 0
-_080DC8B0: .4byte gObjectEvents
-_080DC8B4:
- ldr r2, _080DC930 @ =gSprites
- ldrb r1, [r1, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r5, [r0, 0x22]
- ldrh r6, [r0, 0x20]
- movs r2, 0x20
- ldrsh r1, [r0, r2]
- movs r2, 0x34
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _080DC8DC
- lsls r0, r5, 16
- asrs r0, 16
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- cmp r0, r1
- beq _080DC8F6
-_080DC8DC:
- strh r6, [r4, 0x34]
- strh r5, [r4, 0x36]
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080DC8F6
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnim
-_080DC8F6:
- strh r6, [r4, 0x20]
- strh r5, [r4, 0x22]
- ldr r3, _080DC930 @ =gSprites
- ldr r2, _080DC934 @ =gObjectEvents
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x43
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x43
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0
- bl UpdateObjectEventSpriteVisibility
-_080DC926:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080DC930: .4byte gSprites
-_080DC934: .4byte gObjectEvents
- thumb_func_end sub_80DC86C
-
- thumb_func_start FldEff_Bubbles
-FldEff_Bubbles: @ 80DC938
- push {r4,lr}
- ldr r4, _080DC990 @ =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0
- bl sub_8063BC4
- ldr r0, _080DC994 @ =gFieldEffectObjectTemplatePointers
- adds r0, 0x88
- ldr r0, [r0]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0x52
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080DC988
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _080DC998 @ =gSprites
- adds r1, r0
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r3]
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1, 0x5]
-_080DC988:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DC990: .4byte gFieldEffectArguments
-_080DC994: .4byte gFieldEffectObjectTemplatePointers
-_080DC998: .4byte gSprites
- thumb_func_end FldEff_Bubbles
-
- thumb_func_start sub_80DC99C
-sub_80DC99C: @ 80DC99C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0x80
- movs r1, 0x80
- lsls r1, 1
- ands r0, r1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 24
- ldrh r1, [r4, 0x22]
- subs r1, r0
- strh r1, [r4, 0x22]
- adds r0, r4, 0
- movs r1, 0
- bl UpdateObjectEventSpriteVisibility
- ldrh r1, [r4, 0x3E]
- ldr r0, _080DC9D8 @ =0x00001004
- ands r0, r1
- cmp r0, 0
- beq _080DC9D0
- adds r0, r4, 0
- movs r1, 0x35
- bl FieldEffectStop
-_080DC9D0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080DC9D8: .4byte 0x00001004
- thumb_func_end sub_80DC99C
-
- thumb_func_start FldEff_BerryTreeGrowthSparkle
-FldEff_BerryTreeGrowthSparkle: @ 80DC9DC
- movs r0, 0
- bx lr
- thumb_func_end FldEff_BerryTreeGrowthSparkle
-
- thumb_func_start ShowTreeDisguiseFieldEffect
-ShowTreeDisguiseFieldEffect: @ 80DC9E0
- push {lr}
- movs r0, 0x1C
- movs r1, 0x18
- movs r2, 0x4
- bl ShowDisguiseFieldEffect
- pop {r1}
- bx r1
- thumb_func_end ShowTreeDisguiseFieldEffect
-
- thumb_func_start ShowMountainDisguiseFieldEffect
-ShowMountainDisguiseFieldEffect: @ 80DC9F0
- push {lr}
- movs r0, 0x1D
- movs r1, 0x19
- movs r2, 0x3
- bl ShowDisguiseFieldEffect
- pop {r1}
- bx r1
- thumb_func_end ShowMountainDisguiseFieldEffect
-
- thumb_func_start ShowSandDisguiseFieldEffect
-ShowSandDisguiseFieldEffect: @ 80DCA00
- push {lr}
- movs r0, 0x24
- movs r1, 0x1C
- movs r2, 0x2
- bl ShowDisguiseFieldEffect
- pop {r1}
- bx r1
- thumb_func_end ShowSandDisguiseFieldEffect
-
- thumb_func_start ShowDisguiseFieldEffect
-ShowDisguiseFieldEffect: @ 80DCA10
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- mov r8, r4
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r7, r2, 24
- ldr r5, _080DCA44 @ =gFieldEffectArguments
- ldrb r0, [r5]
- ldrb r1, [r5, 0x4]
- ldrb r2, [r5, 0x8]
- mov r3, sp
- bl TryGetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- beq _080DCA48
- adds r0, r4, 0
- bl FieldEffectActiveListRemove
- movs r0, 0x40
- b _080DCAB4
- .align 2, 0
-_080DCA44: .4byte gFieldEffectArguments
-_080DCA48:
- ldr r1, _080DCAC0 @ =gFieldEffectObjectTemplatePointers
- lsls r0, r6, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- mov r1, sp
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080DCAB0
- mov r0, sp
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080DCAC4 @ =gSprites
- adds r2, r0
- movs r0, 0x3E
- adds r0, r2
- mov r12, r0
- ldrb r3, [r0]
- lsls r1, r3, 30
- lsrs r1, 31
- adds r1, 0x1
- movs r0, 0x1
- ands r1, r0
- lsls r1, 1
- movs r0, 0x3
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
- lsls r3, r7, 4
- ldrb r1, [r2, 0x5]
- movs r0, 0xF
- ands r0, r1
- orrs r0, r3
- strb r0, [r2, 0x5]
- mov r0, r8
- strh r0, [r2, 0x30]
- ldr r0, [r5]
- strh r0, [r2, 0x32]
- ldr r0, [r5, 0x4]
- strh r0, [r2, 0x34]
- ldr r0, [r5, 0x8]
- strh r0, [r2, 0x36]
-_080DCAB0:
- mov r0, sp
- ldrb r0, [r0]
-_080DCAB4:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080DCAC0: .4byte gFieldEffectObjectTemplatePointers
-_080DCAC4: .4byte gSprites
- thumb_func_end ShowDisguiseFieldEffect
-
- thumb_func_start sub_80DCAC8
-sub_80DCAC8: @ 80DCAC8
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r0, [r5, 0x32]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x34]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r5, 0x36]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetObjectEventIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- beq _080DCAF8
- ldrh r1, [r5, 0x30]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl FieldEffectStop
-_080DCAF8:
- ldr r4, _080DCBB0 @ =gObjectEvents
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x5]
- bl GetObjectEventGraphicsInfo
- mov r1, sp
- ldrb r2, [r1]
- lsls r1, r2, 3
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrb r1, [r1, 0x4]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- ldr r1, _080DCBB4 @ =gSprites
- adds r2, r1
- adds r1, r2, 0
- adds r1, 0x3E
- ldrb r1, [r1]
- movs r3, 0x3E
- adds r3, r5
- mov r12, r3
- movs r3, 0x4
- ands r3, r1
- mov r1, r12
- ldrb r4, [r1]
- movs r1, 0x5
- negs r1, r1
- ands r1, r4
- orrs r1, r3
- mov r3, r12
- strb r1, [r3]
- ldrh r1, [r2, 0x20]
- strh r1, [r5, 0x20]
- ldrh r0, [r0, 0xA]
- lsls r0, 16
- asrs r0, 17
- ldrh r1, [r2, 0x22]
- adds r0, r1
- subs r0, 0x10
- strh r0, [r5, 0x22]
- adds r2, 0x43
- ldrb r0, [r2]
- subs r0, 0x1
- adds r1, r5, 0
- adds r1, 0x43
- strb r0, [r1]
- ldrh r1, [r5, 0x2E]
- movs r2, 0x2E
- ldrsh r0, [r5, r2]
- cmp r0, 0x1
- bne _080DCB78
- adds r0, r1, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r5, 0
- movs r1, 0x1
- bl StartSpriteAnim
-_080DCB78:
- movs r3, 0x2E
- ldrsh r0, [r5, r3]
- ldrh r2, [r5, 0x2E]
- cmp r0, 0x2
- bne _080DCB94
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080DCB94
- movs r0, 0x1
- strh r0, [r5, 0x3C]
-_080DCB94:
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x3
- bne _080DCBA8
- ldrh r1, [r5, 0x30]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl FieldEffectStop
-_080DCBA8:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DCBB0: .4byte gObjectEvents
-_080DCBB4: .4byte gSprites
- thumb_func_end sub_80DCAC8
-
- thumb_func_start sub_80DCBB8
-sub_80DCBB8: @ 80DCBB8
- push {lr}
- adds r1, r0, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080DCBD6
- ldr r2, _080DCBDC @ =gSprites
- ldrb r1, [r1, 0x1A]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x2E]
- adds r1, 0x1
- strh r1, [r0, 0x2E]
-_080DCBD6:
- pop {r0}
- bx r0
- .align 2, 0
-_080DCBDC: .4byte gSprites
- thumb_func_end sub_80DCBB8
-
- thumb_func_start sub_80DCBE0
-sub_80DCBE0: @ 80DCBE0
- push {lr}
- adds r2, r0, 0
- adds r2, 0x21
- ldrb r1, [r2]
- cmp r1, 0x2
- beq _080DCC16
- cmp r1, 0
- beq _080DCC16
- ldrb r1, [r0, 0x1A]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DCC08 @ =gSprites
- adds r1, r0, r1
- movs r3, 0x3C
- ldrsh r0, [r1, r3]
- cmp r0, 0
- bne _080DCC0C
- movs r0, 0
- b _080DCC18
- .align 2, 0
-_080DCC08: .4byte gSprites
-_080DCC0C:
- movs r0, 0x2
- strb r0, [r2]
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
-_080DCC16:
- movs r0, 0x1
-_080DCC18:
- pop {r1}
- bx r1
- thumb_func_end sub_80DCBE0
-
- thumb_func_start FldEff_Sparkle
-FldEff_Sparkle: @ 80DCC1C
- push {r4,lr}
- ldr r4, _080DCC84 @ =gFieldEffectArguments
- ldr r0, [r4]
- adds r0, 0x7
- str r0, [r4]
- ldr r0, [r4, 0x4]
- adds r0, 0x7
- str r0, [r4, 0x4]
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8063BC4
- ldr r0, _080DCC88 @ =gFieldEffectObjectTemplatePointers
- adds r0, 0x8C
- ldr r0, [r0]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0x52
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _080DCC7C
- ldr r0, _080DCC8C @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- movs r0, 0x3
- ldrb r2, [r4, 0x8]
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r1]
-_080DCC7C:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DCC84: .4byte gFieldEffectArguments
-_080DCC88: .4byte gFieldEffectObjectTemplatePointers
-_080DCC8C: .4byte gSprites
- thumb_func_end FldEff_Sparkle
-
- thumb_func_start sub_80DCC90
-sub_80DCC90: @ 80DCC90
- push {lr}
- adds r2, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0
- bne _080DCCC4
- adds r0, r2, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080DCCBC
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
-_080DCCBC:
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0
- beq _080DCCDA
-_080DCCC4:
- ldrh r0, [r2, 0x30]
- adds r0, 0x1
- strh r0, [r2, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x22
- ble _080DCCDA
- adds r0, r2, 0
- movs r1, 0x36
- bl FieldEffectStop
-_080DCCDA:
- pop {r0}
- bx r0
- thumb_func_end sub_80DCC90
-
- thumb_func_start sub_80DCCE0
-sub_80DCCE0: @ 80DCCE0
- push {r4,lr}
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080DCCFE
- ldrh r1, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldEffectStop
- b _080DCD14
-_080DCCFE:
- adds r0, r4, 0
- movs r1, 0
- bl UpdateObjectEventSpriteVisibility
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- movs r2, 0
- bl SetObjectSubpriorityByZCoord
-_080DCD14:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80DCCE0
-
- thumb_func_start sub_80DCD1C
-sub_80DCD1C: @ 80DCD1C
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080DCD3A
- ldrh r1, [r2, 0x2E]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r2, 0
- bl FieldEffectStop
- b _080DCD42
-_080DCD3A:
- adds r0, r2, 0
- movs r1, 0
- bl UpdateObjectEventSpriteVisibility
-_080DCD42:
- pop {r0}
- bx r0
- thumb_func_end sub_80DCD1C
-
- thumb_func_start sub_80DCD48
-sub_80DCD48: @ 80DCD48
- push {r4-r7,lr}
- adds r6, r0, 0
- adds r0, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 24
- lsrs r2, 24
- adds r1, r6, 0
- bl SetObjectSubpriorityByZCoord
- movs r7, 0
-_080DCD5E:
- lsls r0, r7, 3
- adds r0, r7
- lsls r0, 2
- ldr r1, _080DCDF8 @ =gObjectEvents
- adds r4, r0, r1
- ldrb r0, [r4]
- lsls r0, 31
- cmp r0, 0
- beq _080DCE00
- ldrb r0, [r4, 0x5]
- bl GetObjectEventGraphicsInfo
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080DCDFC @ =gSprites
- adds r5, r0, r1
- adds r0, r6, 0
- adds r0, 0x28
- movs r2, 0
- ldrsb r2, [r0, r2]
- ldrh r0, [r6, 0x20]
- adds r1, r0, r2
- subs r0, r2
- lsls r0, 16
- lsrs r4, r0, 16
- lsls r1, 16
- asrs r1, 16
- movs r0, 0x20
- ldrsh r2, [r5, r0]
- cmp r1, r2
- bge _080DCE00
- lsls r0, r4, 16
- asrs r0, 16
- cmp r0, r2
- ble _080DCE00
- adds r0, r5, 0
- adds r0, 0x29
- movs r3, 0
- ldrsb r3, [r0, r3]
- ldrh r2, [r5, 0x22]
- adds r2, r3
- ldrh r4, [r5, 0x22]
- adds r0, r6, 0
- adds r0, 0x29
- movs r1, 0
- ldrsb r1, [r0, r1]
- ldrh r0, [r6, 0x22]
- subs r0, r1
- lsls r0, 16
- asrs r0, 16
- adds r3, r0, r3
- lsls r2, 16
- asrs r2, 16
- lsls r3, 16
- asrs r3, 16
- cmp r2, r3
- blt _080DCDD8
- cmp r2, r0
- bge _080DCE00
-_080DCDD8:
- lsls r0, r4, 16
- asrs r0, 16
- cmp r0, r3
- ble _080DCE00
- adds r2, r6, 0
- adds r2, 0x43
- adds r0, r5, 0
- adds r0, 0x43
- ldrb r1, [r0]
- ldrb r0, [r2]
- cmp r0, r1
- bhi _080DCE00
- adds r0, r1, 0x2
- strb r0, [r2]
- b _080DCE0A
- .align 2, 0
-_080DCDF8: .4byte gObjectEvents
-_080DCDFC: .4byte gSprites
-_080DCE00:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0xF
- bls _080DCD5E
-_080DCE0A:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80DCD48
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s
index ccf946752..754294337 100644
--- a/asm/field_player_avatar.s
+++ b/asm/field_player_avatar.s
@@ -3158,7 +3158,7 @@ InitPlayerAvatar: @ 805CA3C
movs r1, 0x1
orrs r0, r1
strb r0, [r4, 0x2]
- bl sub_80DB0C4
+ bl CreateWarpArrowSprite
strb r0, [r4, 0x1B]
adds r0, r4, 0
mov r1, r9
@@ -3403,7 +3403,7 @@ _0805CC62:
movs r1, 0
ldrsh r3, [r7, r1]
adds r1, r6, 0
- bl sub_80DB134
+ bl ShowWarpArrowSprite
b _0805CCC2
.align 2, 0
_0805CCA4: .4byte gUnknown_835B890
@@ -3419,7 +3419,7 @@ _0805CCA8:
cmp r1, 0x3
ble _0805CC62
ldrb r0, [r5, 0x1B]
- bl objid_set_invisible
+ bl SetSpriteInvisible
_0805CCC2:
add sp, 0x4
pop {r3,r4}
diff --git a/asm/field_weather.s b/asm/field_weather.s
index 2c7ef2128..c5204def2 100644
--- a/asm/field_weather.s
+++ b/asm/field_weather.s
@@ -1906,8 +1906,8 @@ _0807AA84: .4byte gUnknown_2037F34
_0807AA88: .4byte 0x000006c6
thumb_func_end IsWeatherNotFadingIn
- thumb_func_start sub_807AA8C
-sub_807AA8C: @ 807AA8C
+ thumb_func_start UpdateSpritePaletteWithWeather
+UpdateSpritePaletteWithWeather: @ 807AA8C
push {r4-r6,lr}
lsls r0, 24
lsrs r0, 8
@@ -2017,7 +2017,7 @@ _0807AB68:
bx r0
.align 2, 0
_0807AB70: .4byte 0x000073fc
- thumb_func_end sub_807AA8C
+ thumb_func_end UpdateSpritePaletteWithWeather
thumb_func_start sub_807AB74
sub_807AB74: @ 807AB74
@@ -2078,7 +2078,7 @@ sub_807ABC0: @ 807ABC0
movs r2, 0x20
bl LoadPalette
ldrb r0, [r4]
- bl sub_807AA8C
+ bl UpdateSpritePaletteWithWeather
pop {r4}
pop {r0}
bx r0
diff --git a/asm/field_weather_effects.s b/asm/field_weather_effects.s
index 0330bcbaf..24ccbcf94 100644
--- a/asm/field_weather_effects.s
+++ b/asm/field_weather_effects.s
@@ -252,7 +252,7 @@ _0807B456:
adds r2, 0x20
adds r3, r4, 0
adds r3, 0x22
- bl sub_8063B1C
+ bl SetSpritePosToMapCoords
adds r4, 0x3E
ldrb r0, [r4]
movs r1, 0x2
diff --git a/asm/overworld.s b/asm/overworld.s
index 7572f413a..7fd5470dd 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -7273,7 +7273,7 @@ InitLinkPlayerObjectEventPos: @ 8058448
adds r2, 0xC
adds r3, r4, 0
adds r3, 0xE
- bl sub_8063B1C
+ bl SetSpritePosToMapCoords
ldrh r0, [r4, 0xC]
adds r0, 0x8
strh r0, [r4, 0xC]
diff --git a/data/event_object_movement.s b/data/event_object_movement.s
index 5920835c4..88aa543b9 100644
--- a/data/event_object_movement.s
+++ b/data/event_object_movement.s
@@ -2,7 +2,7 @@
.include "constants/constants.inc"
.section .rodata
.align 2
-gUnknown_835B934:: @ 835B934
+gReflectionEffectPaletteMap:: @ 835B934
.byte 0x01, 0x01, 0x06, 0x07, 0x08, 0x09, 0x06, 0x07, 0x08, 0x09, 0x0b, 0x0b, 0x00, 0x00, 0x00, 0x00
gUnknown_835B944:: @ 835B944
@@ -6325,16 +6325,16 @@ gUnknown_83A5374:: @ 83A5374
obj_frame_tiles gUnknown_8398128, 0x400
gUnknown_83A537C:: @ 83A537C
- spr_template 65535, 65535, gObjectEventBaseOam_128x64, gUnknown_83A5358, gUnknown_83A535C, gDummySpriteAffineAnimTable, oamc_shadow
+ spr_template 65535, 65535, gObjectEventBaseOam_128x64, gUnknown_83A5358, gUnknown_83A535C, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect
gUnknown_83A5394:: @ 83A5394
- spr_template 65535, 65535, gObjectEventBaseOam_Unknown1, gUnknown_83A5358, gUnknown_83A5364, gDummySpriteAffineAnimTable, oamc_shadow
+ spr_template 65535, 65535, gObjectEventBaseOam_Unknown1, gUnknown_83A5358, gUnknown_83A5364, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect
gUnknown_83A53AC:: @ 83A53AC
- spr_template 65535, 65535, gObjectEventBaseOam_Unknown2, gUnknown_83A5358, gUnknown_83A536C, gDummySpriteAffineAnimTable, oamc_shadow
+ spr_template 65535, 65535, gObjectEventBaseOam_Unknown2, gUnknown_83A5358, gUnknown_83A536C, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect
gUnknown_83A53C4:: @ 83A53C4
- spr_template 65535, 65535, gObjectEventBaseOam_Unknown3, gUnknown_83A5358, gUnknown_83A5374, gDummySpriteAffineAnimTable, oamc_shadow
+ spr_template 65535, 65535, gObjectEventBaseOam_Unknown3, gUnknown_83A5358, gUnknown_83A5374, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect
gUnknown_83A53DC:: @ 83A53DC
overworld_frame gUnknown_839A008, 2, 2, 0
@@ -6355,7 +6355,7 @@ gUnknown_83A541C:: @ 83A541C
.4byte gUnknown_83A5404
gUnknown_83A5420:: @ 83A5420
- spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A541C, gUnknown_83A53DC, gDummySpriteAffineAnimTable, unc_grass_normal
+ spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A541C, gUnknown_83A53DC, gDummySpriteAffineAnimTable, UpdateTallGrassFieldEffect
gUnknown_83A5438:: @ 83A5438
overworld_frame gUnknown_83986A8, 2, 2, 0
@@ -6379,7 +6379,7 @@ gUnknown_83A5484:: @ 83A5484
.4byte gUnknown_83A5460
gUnknown_83A5488:: @ 83A5488
- spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A5484, gUnknown_83A5438, gDummySpriteAffineAnimTable, sub_80DCD1C
+ spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A5484, gUnknown_83A5438, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim
gUnknown_83A54A0:: @ 83A54A0
overworld_frame gUnknown_8398928, 2, 2, 0
@@ -6400,7 +6400,7 @@ gUnknown_83A54E0:: @ 83A54E0
.4byte gUnknown_83A54C8
gUnknown_83A54E4:: @ 83A54E4
- spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A54E0, gUnknown_83A54A0, gDummySpriteAffineAnimTable, sub_80DC2FC
+ spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A54E0, gUnknown_83A54A0, gDummySpriteAffineAnimTable, UpdateAshFieldEffect
gUnknown_83A54FC:: @ 83A54FC
overworld_frame gUnknown_8396B08, 2, 8, 0
@@ -6437,7 +6437,7 @@ gUnknown_83A555C:: @ 83A555C
.4byte gUnknown_83A5550
gUnknown_83A556C:: @ 83A556C
- spr_template 0xFFFF, 0xFFFF, gObjectEventBaseOam_32x32, gUnknown_83A555C, gUnknown_83A54FC, gDummySpriteAffineAnimTable, sub_80DC4F8
+ spr_template 0xFFFF, 0xFFFF, gObjectEventBaseOam_32x32, gUnknown_83A555C, gUnknown_83A54FC, gDummySpriteAffineAnimTable, UpdateSurfBlobFieldEffect
gUnknown_83A5584:: @ 83A5584
overworld_frame gUnknown_8398BA8, 2, 2, 0
@@ -6542,7 +6542,7 @@ gUnknown_83A56E0:: @ 83A56E0
.4byte gUnknown_83A56D8
gUnknown_83A56F4:: @ 83A56F4
- spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_16x16, gUnknown_83A56E0, gUnknown_83A56B0, gDummySpriteAffineAnimTable, sub_80DBAFC
+ spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_16x16, gUnknown_83A56E0, gUnknown_83A56B0, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect
gUnknown_83A570C:: @ 83A570C
overworld_frame gUnknown_839A488, 2, 2, 0
@@ -6572,7 +6572,7 @@ gUnknown_83A573C:: @ 83A573C
.4byte gUnknown_83A5734
gUnknown_83A5750:: @ 83A5750
- spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_16x16, gUnknown_83A573C, gUnknown_83A570C, gDummySpriteAffineAnimTable, sub_80DBAFC
+ spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_16x16, gUnknown_83A573C, gUnknown_83A570C, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect
gUnknown_83A5768:: @ 83A5768
overworld_frame gUnknown_839A588, 2, 2, 0
@@ -6624,7 +6624,7 @@ gUnknown_83A57C8:: @ 83A57C8
.4byte gUnknown_83A57C0
gUnknown_83A57EC:: @ 83A57EC
- spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_16x16, gUnknown_83A57C8, gUnknown_83A5768, gDummySpriteAffineAnimTable, sub_80DBAFC
+ spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_16x16, gUnknown_83A57C8, gUnknown_83A5768, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect
gUnknown_83A5804:: @ 83A5804
overworld_frame gUnknown_839AA48, 2, 2, 0
@@ -6670,7 +6670,7 @@ gUnknown_83A5894:: @ 83A5894
.4byte gUnknown_83A5870
gUnknown_83A589C:: @ 83A589C
- spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_Unknown1, gUnknown_83A5894, gUnknown_83A5854, gDummySpriteAffineAnimTable, sub_80DBC2C
+ spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_Unknown1, gUnknown_83A5894, gUnknown_83A5854, gDummySpriteAffineAnimTable, UpdateSplashFieldEffect
gUnknown_83A58B4:: @ 83A58B4
overworld_frame gUnknown_839ACC8, 2, 1, 0
@@ -6709,7 +6709,7 @@ gUnknown_83A5938:: @ 83A5938
.4byte gUnknown_83A5918
gUnknown_83A593C:: @ 83A593C
- spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A5938, gUnknown_83A58F8, gDummySpriteAffineAnimTable, unc_grass_tall
+ spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A5938, gUnknown_83A58F8, gDummySpriteAffineAnimTable, UpdateLongGrassFieldEffect
gUnknown_83A5954:: @ 83A5954
overworld_frame gUnknown_8399488, 2, 2, 0
@@ -6761,7 +6761,7 @@ gUnknown_83A5A2C:: @ 83A5A2C
.4byte gUnknown_83A5A04
gUnknown_83A5A30:: @ 83A5A30
- spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A5A2C, gUnknown_83A59BC, gDummySpriteAffineAnimTable, sub_80DCD1C
+ spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A5A2C, gUnknown_83A59BC, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim
gUnknown_83A5A48:: @ 83A5A48
overworld_frame gUnknown_8399C08, 2, 2, 0
@@ -6782,7 +6782,7 @@ gUnknown_83A5A84:: @ 83A5A84
.4byte gUnknown_83A5A68
gUnknown_83A5A88:: @ 83A5A88
- spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A5A84, gUnknown_83A5A48, gDummySpriteAffineAnimTable, sub_80DCD1C
+ spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A5A84, gUnknown_83A5A48, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim
gUnknown_83A5AA0:: @ 83A5AA0
overworld_frame gUnknown_839A788, 2, 2, 0
@@ -6801,7 +6801,7 @@ gUnknown_83A5AD4:: @ 83A5AD4
.4byte gUnknown_83A5AC0
gUnknown_83A5AD8:: @ 83A5AD8
- spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_16x16, gUnknown_83A5AD4, gUnknown_83A5AA0, gDummySpriteAffineAnimTable, sub_80DCD1C
+ spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_16x16, gUnknown_83A5AD4, gUnknown_83A5AA0, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim
gUnknown_83A5AF0:: @ 83A5AF0
overworld_frame gUnknown_839A988, 2, 1, 0
@@ -6818,7 +6818,7 @@ gUnknown_83A5B18:: @ 83A5B18
.4byte gUnknown_83A5B08
gUnknown_83A5B1C:: @ 83A5B1C
- spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_Unknown1, gUnknown_83A5B18, gUnknown_83A5AF0, gDummySpriteAffineAnimTable, sub_80DC86C
+ spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_Unknown1, gUnknown_83A5B18, gUnknown_83A5AF0, gDummySpriteAffineAnimTable, UpdateSandPileFieldEffect
gUnknown_83A5B34:: @ 83A5B34
overworld_frame gUnknown_839AD88, 2, 2, 0
@@ -6839,7 +6839,7 @@ gUnknown_83A5B70:: @ 83A5B70
.4byte gUnknown_83A5B54
gUnknown_83A5B74:: @ 83A5B74
- spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_16x16, gUnknown_83A5B70, gUnknown_83A5B34, gDummySpriteAffineAnimTable, sub_80DCD1C
+ spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_16x16, gUnknown_83A5B70, gUnknown_83A5B34, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim
gUnknown_83A5B8C:: @ 83A5B8C
obj_rot_scal_anim_frame -256, 256, 128, 0
@@ -6900,7 +6900,7 @@ gUnknown_83A5CAC:: @ 83A5CAC
.4byte gUnknown_83A5C8C
gUnknown_83A5CB4:: @ 83A5CB4
- spr_template 0xFFFF, 0xFFFF, gObjectEventBaseOam_16x32, gUnknown_83A5CAC, gUnknown_83A5C4C, gDummySpriteAffineAnimTable, sub_80DCAC8
+ spr_template 0xFFFF, 0xFFFF, gObjectEventBaseOam_16x32, gUnknown_83A5CAC, gUnknown_83A5C4C, gDummySpriteAffineAnimTable, UpdateDisguiseFieldEffect
gUnknown_83A5CCC:: @ 83A5CCC
overworld_frame gUnknown_839B708, 2, 4, 0
@@ -6930,7 +6930,7 @@ gUnknown_83A5D2C:: @ 83A5D2C
.4byte gUnknown_83A5D0C
gUnknown_83A5D34:: @ 83A5D34
- spr_template 0xFFFF, 0xFFFF, gObjectEventBaseOam_16x32, gUnknown_83A5D2C, gUnknown_83A5CCC, gDummySpriteAffineAnimTable, sub_80DCAC8
+ spr_template 0xFFFF, 0xFFFF, gObjectEventBaseOam_16x32, gUnknown_83A5D2C, gUnknown_83A5CCC, gDummySpriteAffineAnimTable, UpdateDisguiseFieldEffect
gUnknown_83A5D4C:: @ 83A5D4C
overworld_frame gUnknown_839BE08, 2, 4, 0
@@ -6942,7 +6942,7 @@ gUnknown_83A5D4C:: @ 83A5D4C
overworld_frame gUnknown_839BE08, 2, 4, 6
gUnknown_83A5D84:: @ 83A5D84
- spr_template 0xFFFF, 0xFFFF, gObjectEventBaseOam_16x32, gUnknown_83A5CAC, gUnknown_83A5D4C, gDummySpriteAffineAnimTable, sub_80DCAC8
+ spr_template 0xFFFF, 0xFFFF, gObjectEventBaseOam_16x32, gUnknown_83A5CAC, gUnknown_83A5D4C, gDummySpriteAffineAnimTable, UpdateDisguiseFieldEffect
gUnknown_83A5D9C:: @ 83A5D9C
overworld_frame gUnknown_839D3C8, 8, 8, 0
@@ -6994,7 +6994,7 @@ gUnknown_83A5E34:: @ 83A5E34
.4byte gUnknown_83A5E28
gUnknown_83A5E38:: @ 83A5E38
- spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A5E34, gUnknown_83A5E18, gDummySpriteAffineAnimTable, sub_80DB8AC
+ spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A5E34, gUnknown_83A5E18, gDummySpriteAffineAnimTable, UpdateShortGrassFieldEffect
gUnknown_83A5E50:: @ 83A5E50
overworld_frame gUnknown_839C508, 2, 2, 0
@@ -7007,7 +7007,7 @@ gUnknown_83A5E60:: @ 83A5E60
.4byte gUnknown_83A5E58
gUnknown_83A5E64:: @ 83A5E64
- spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A5E60, gUnknown_83A5E50, gDummySpriteAffineAnimTable, sub_80DBFF4
+ spr_template 0xFFFF, 0x1005, gObjectEventBaseOam_16x16, gUnknown_83A5E60, gUnknown_83A5E50, gDummySpriteAffineAnimTable, UpdateHotSpringsWaterFieldEffect
gUnknown_83A5E7C:: @ 83A5E7C
overworld_frame gUnknown_839C5A8, 2, 2, 0
@@ -7079,7 +7079,7 @@ gUnknown_83A5FA0:: @ 83A5FA0
.4byte gUnknown_83A5F7C
gUnknown_83A5FA4:: @ 83A5FA4
- spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_16x32, gUnknown_83A5FA0, gUnknown_83A5F3C, gDummySpriteAffineAnimTable, sub_80DC99C
+ spr_template 0xFFFF, 0x1004, gObjectEventBaseOam_16x32, gUnknown_83A5FA0, gUnknown_83A5F3C, gDummySpriteAffineAnimTable, UpdateBubblesFieldEffect
gUnknown_83A5FBC:: @ 83A5FBC
overworld_frame gUnknown_839D2A8, 2, 2, 0
@@ -7095,7 +7095,7 @@ gUnknown_83A5FDC:: @ 83A5FDC
.4byte gUnknown_83A5FCC
gUnknown_83A5FE0:: @ 83A5FE0
- spr_template 0xFFFF, 0x100F, gObjectEventBaseOam_16x16, gUnknown_83A5FDC, gUnknown_83A5FBC, gDummySpriteAffineAnimTable, sub_80DCC90
+ spr_template 0xFFFF, 0x100F, gObjectEventBaseOam_16x16, gUnknown_83A5FDC, gUnknown_83A5FBC, gDummySpriteAffineAnimTable, UpdateSparkleFieldEffect
gUnknown_83A5FF8::
obj_pal gUnknown_839D3A8, 0x100F
diff --git a/data/field_effect_helpers.s b/data/field_effect_helpers.s
deleted file mode 100644
index 7ad7b168a..000000000
--- a/data/field_effect_helpers.s
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "constants/region_map.h"
-#include "constants/flags.h"
-#include "constants/moves.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gUnknown_83FECCC:: @ 83FECCC
- .2byte 0x0c, 0x1c, 0x2c
-
-gUnknown_83FECD2:: @ 83FECD2
- .byte 0, 1, 2, 3
-
-gUnknown_83FECD6:: @ 83FECD6
- .2byte 0x0004, 0x0004, 0x0004, 0x0010
-
- .align 2
-gUnknown_83FECE0:: @ 83FECE0
- .4byte sub_80DBB18
- .4byte sub_80DBB3C
-
- .align 2
-gUnknown_83FECE8:: @ 83FECE8
- .4byte sub_80DC318
- .4byte sub_80DC348
- .4byte sub_80DC3A8
-
-gUnknown_83FECF4:: @ 83FECF4
- .byte 0, 0, 1, 2, 3
-
- .align 1
-gUnknown_83FECFA:: @ 83FECFA
- .2byte 0x0007, 0x000f
diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s
index 95d63568c..43698653d 100644
--- a/data/field_effect_scripts.s
+++ b/data/field_effect_scripts.s
@@ -86,15 +86,15 @@ gFldEffScript_UseCutOnTree:: @ 81D97D0
end
gFldEffScript_Shadow:: @ 81D97D6
- callnative oei_shadow
+ callnative FldEff_Shadow
end
gFldEffScript_TallGrass:: @ 81D97DC
- loadfadedpal_callnative gUnknown_83A5348, oei_grass_normal
+ loadfadedpal_callnative gUnknown_83A5348, FldEff_TallGrass
end
gFldEffScript_Ripple:: @ 81D97E6
- loadfadedpal_callnative gUnknown_83A5348, oei_ripples
+ loadfadedpal_callnative gUnknown_83A5348, FldEff_Ripple
end
gFldEffScript_FieldMoveShowMon:: @ 81D97F0
@@ -129,7 +129,7 @@ gFldEffScript_SandFootprints:: @ 81D9821
end
gFldEffScript_JumpBigSplash:: @ 81D982B
- loadfadedpal_callnative gUnknown_83A5340, oei_water_drop_tall
+ loadfadedpal_callnative gUnknown_83A5340, FldEff_JumpBigSplash
end
gFldEffScript_Splash:: @ 81D9835
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index edc5c8b11..7828d0bcb 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -33,10 +33,10 @@ u8 GetObjectEventIdByXY(s16, s16);
void ObjectEventSetDirection(struct ObjectEvent *, u8);
u8 sub_808D4F4(void);
void RemoveObjectEventByLocalIdAndMap(u8, u8, u8);
-void npc_load_two_palettes__no_record(u16, u8);
-void npc_load_two_palettes__and_record(u16, u8);
+void LoadPlayerObjectReflectionPalette(u16, u8);
+void LoadSpecialObjectReflectionPalette(u16, u8);
void sub_805F7C4(u8, u8, u8, s16, s16);
-void pal_patch_for_npc(u16, u8);
+void PatchObjectPalette(u16, u8);
void sub_808E16C(s16, s16);
void sub_808F28C(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat);
void sub_8092FF0(s16, s16, s16 *, s16 *);
@@ -121,6 +121,13 @@ u8 sub_8064194(u8 direction);
u8 sub_80641C0(u8 direction);
void sub_805F378(s16 x, s16 y);
+void sub_805F724(struct ObjectEvent *, s16 x, s16 y);
+u8 CreateCopySpriteAt(struct Sprite * sprite, s16 x, s16 y, u8 subpriority);
+u16 GetObjectPaletteTag(u8 paletteIndex);
+void SetSpritePosToMapCoords(s16 x, s16 y, s16 *x2, s16 *y2);
+void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible);
+u8 ZCoordToPriority(u8 z);
+void SetObjectSubpriorityByZCoord(u8 z, struct Sprite * sprite, u8 offset);
// Exported data declarations
@@ -131,6 +138,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);
+extern const u8 gReflectionEffectPaletteMap[];
#endif // GUARD_EVENT_OBJECT_MOVEMENT_H
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index c3e5ae29a..831f83fd5 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -13,7 +13,7 @@
// Exported ROM declarations
u8 sub_8154228(void);
-bool8 sub_8155DA0(struct ObjectEvent *);
+bool8 sub_80DCBE0(struct ObjectEvent *);
void sub_80DC44C(u8, u8);
void sub_80DC478(u8, u8);
void StartAshFieldEffect(s16, s16, u16, s16);
diff --git a/include/field_weather.h b/include/field_weather.h
index 7488c8c5a..115cc0dca 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -18,7 +18,7 @@ void SetWeatherScreenFadeOut(void);
void sub_807B070(void);
u8 GetCurrentWeather(void);
void FieldWeather_StartFadingOutCreditsMap(u8, u8, u32);
-void sub_807AA8C(u8 palIdx);
+void UpdateSpritePaletteWithWeather(u8 palIdx);
void ResetPreservedPalettesInWeather(void);
void PreservePaletteInWeather(u8 palIdx);
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index b3f5b1d42..9c380d993 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -217,17 +217,17 @@ struct ObjectEvent
/*0x0C*/ struct Coords16 initialCoords;
/*0x10*/ struct Coords16 currentCoords;
/*0x14*/ struct Coords16 previousCoords;
- /*0x18*/ u8 facingDirection:4; //current direction?
- /*0x18*/ u8 placeholder18:4;
+ /*0x18*/ u8 facingDirection:4;
+ /*0x18*/ u8 movementDirection:4;
/*0x19*/ union ObjectEventRange range;
- /*0x1A*/ u8 mapobj_unk_1A;
+ /*0x1A*/ u8 fieldEffectSpriteId;
/*0x1B*/ u8 mapobj_unk_1B;
/*0x1C*/ u8 mapobj_unk_1C;
/*0x1D*/ u8 trainerRange_berryTreeId;
- /*0x1E*/ u8 mapobj_unk_1E;
- /*0x1F*/ u8 mapobj_unk_1F;
+ /*0x1E*/ u8 currentMetatileBehavior;
+ /*0x1F*/ u8 previousMetatileBehavior;
/*0x20*/ u8 mapobj_unk_20;
- /*0x21*/ u8 mapobj_unk_21;
+ /*0x21*/ u8 directionSequenceIndex;
/*0x22*/ u8 animId;
/*size = 0x24*/
};
diff --git a/include/global.h b/include/global.h
index b3fdfe231..8a8877143 100644
--- a/include/global.h
+++ b/include/global.h
@@ -612,8 +612,8 @@ struct QuestLogObjectEvent
/*0x0a*/ s16 x;
/*0x0c*/ s16 y;
/*0x0e*/ u8 trainerRange_berryTreeId;
- /*0x0f*/ u8 mapobj_unk_1F;
- /*0x10*/ u8 mapobj_unk_21;
+ /*0x0f*/ u8 previousMetatileBehavior;
+ /*0x10*/ u8 directionSequenceIndex;
/*0x11*/ u8 animId;
};
diff --git a/ld_script.txt b/ld_script.txt
index e16e57209..65666ddc0 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -200,7 +200,7 @@ SECTIONS {
src/cable_car_util.o(.text);
src/save.o(.text);
src/mystery_event_script.o(.text);
- asm/field_effect_helpers.o(.text);
+ src/field_effect_helpers.o(.text);
src/battle_anim_sound_tasks.o(.text);
src/battle_controller_safari.o(.text);
src/fldeff_sweetscent.o(.text);
@@ -496,7 +496,7 @@ SECTIONS {
src/battle_controller_link_partner.o(.rodata);
src/battle_message.o(.rodata);
src/save.o(.rodata);
- data/field_effect_helpers.o(.rodata);
+ src/field_effect_helpers.o(.rodata);
src/battle_controller_safari.o(.rodata);
src/battle_anim_effects_3.o(.rodata);
src/learn_move.o(.rodata);
diff --git a/src/field_effect.c b/src/field_effect.c
index 9b2974f1f..c7dd8b4e4 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -446,7 +446,7 @@ static void FieldEffectScript_LoadFadedPal(const u8 **script)
LoadSpritePalette(spritePalette);
if (idx == 0xFF)
sub_8083598(IndexOfSpritePaletteTag(spritePalette->tag));
- sub_807AA8C(IndexOfSpritePaletteTag(spritePalette->tag));
+ UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(spritePalette->tag));
*script += sizeof(u32);
}
@@ -1604,7 +1604,7 @@ static bool8 waterfall_4_wait_player_move_probably(struct Task * task, struct Ob
{
if (!ObjectEventClearHeldMovementIfFinished(playerObj))
return FALSE;
- if (MetatileBehavior_IsWaterfall(playerObj->mapobj_unk_1E))
+ if (MetatileBehavior_IsWaterfall(playerObj->currentMetatileBehavior))
{
task->data[0] = 3;
return TRUE;
@@ -1664,7 +1664,7 @@ static bool8 dive_3_unknown(struct Task * task)
PlayerGetDestCoords(&pos.x, &pos.y);
if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
{
- dive_warp(&pos, gObjectEvents[gPlayerAvatar.objectEventId].mapobj_unk_1E);
+ dive_warp(&pos, gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior);
DestroyTask(FindTaskIdByFunc(Task_Dive));
FieldEffectActiveListRemove(FLDEFF_USE_DIVE);
}
@@ -2904,7 +2904,7 @@ static void UseSurfEffect_1(struct Task * task)
gPlayerAvatar.preventStep = TRUE;
SetPlayerAvatarStateMask(8);
PlayerGetDestCoords(&task->data[1], &task->data[2]);
- MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].placeholder18, &task->data[1], &task->data[2]);
+ MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].movementDirection, &task->data[1], &task->data[2]);
task->data[0]++;
}
@@ -2940,11 +2940,11 @@ static void UseSurfEffect_4(struct Task * task)
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
ObjectEventClearHeldMovementIfFinished(objectEvent);
- ObjectEventSetHeldMovement(objectEvent, sub_80641C0(objectEvent->placeholder18));
+ ObjectEventSetHeldMovement(objectEvent, sub_80641C0(objectEvent->movementDirection));
gFieldEffectArguments[0] = task->data[1];
gFieldEffectArguments[1] = task->data[2];
gFieldEffectArguments[2] = gPlayerAvatar.objectEventId;
- objectEvent->mapobj_unk_1A = FieldEffectStart(FLDEFF_SURF_BLOB);
+ objectEvent->fieldEffectSpriteId = FieldEffectStart(FLDEFF_SURF_BLOB);
task->data[0]++;
}
}
@@ -2957,8 +2957,8 @@ static void UseSurfEffect_5(struct Task * task)
{
gPlayerAvatar.preventStep = FALSE;
gPlayerAvatar.flags &= 0xdf;
- ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->placeholder18));
- sub_80DC44C(objectEvent->mapobj_unk_1A, 1);
+ ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->movementDirection));
+ sub_80DC44C(objectEvent->fieldEffectSpriteId, 1);
UnfreezeObjectEvents();
ScriptContext2_Disable();
FieldEffectActiveListRemove(FLDEFF_USE_SURF);
@@ -3151,8 +3151,8 @@ static void UseFlyEffect_3(struct Task * task)
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);
+ sub_80DC44C(objectEvent->fieldEffectSpriteId, 2);
+ sub_80DC478(objectEvent->fieldEffectSpriteId, 0);
}
task->data[1] = sub_8087168();
task->data[0]++;
@@ -3435,7 +3435,7 @@ static void FlyInEffect_1(struct Task * task)
SetPlayerAvatarStateMask(0x01);
if (task->data[15] & 0x08)
{
- sub_80DC44C(objectEvent->mapobj_unk_1A, 0);
+ sub_80DC44C(objectEvent->fieldEffectSpriteId, 0);
}
ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
CameraObjectReset2();
@@ -3549,7 +3549,7 @@ static void FlyInEffect_7(struct Task * task)
if (task->data[15] & 0x08)
{
state = 2;
- sub_80DC44C(objectEvent->mapobj_unk_1A, 1);
+ sub_80DC44C(objectEvent->fieldEffectSpriteId, 1);
}
ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(state));
ObjectEventTurn(objectEvent, DIR_SOUTH);
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
new file mode 100644
index 000000000..c32ea929c
--- /dev/null
+++ b/src/field_effect_helpers.c
@@ -0,0 +1,1411 @@
+#include "global.h"
+#include "event_object_movement.h"
+#include "field_camera.h"
+#include "field_effect.h"
+#include "field_weather.h"
+#include "fieldmap.h"
+#include "metatile_behavior.h"
+#include "sound.h"
+#include "sprite.h"
+#include "constants/field_effects.h"
+#include "constants/songs.h"
+
+#define OBJ_EVENT_PAL_TAG_NONE 0x11FF // duplicate of define in event_object_movement.c
+
+static void UpdateObjectReflectionSprite(struct Sprite * sprite);
+static void LoadObjectReflectionPalette(struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent * objectEvent, u8 paletteNum);
+static void LoadObjectRegularReflectionPalette(struct ObjectEvent * objectEvent, u8 paletteNum);
+static void sub_80DCD48(struct Sprite * sprite, u8 z, u8 offset);
+static void FadeFootprintsTireTracks_Step0(struct Sprite * sprite);
+static void FadeFootprintsTireTracks_Step1(struct Sprite * sprite);
+static void UpdateFeetInFlowingWaterFieldEffect(struct Sprite * sprite);
+static void UpdateAshFieldEffect_Step0(struct Sprite * sprite);
+static void UpdateAshFieldEffect_Step1(struct Sprite * sprite);
+static void UpdateAshFieldEffect_Step2(struct Sprite * sprite);
+static void SynchroniseSurfAnim(struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static void sub_80DC588(struct ObjectEvent * objectEvent, struct Sprite * sprite);
+static void CreateBobbingEffect(struct ObjectEvent * objectEvent, struct Sprite * linkedSprite, struct Sprite * sprite);
+static void sub_80DC700(struct Sprite * sprite);
+static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum);
+
+void SetUpReflection(struct ObjectEvent * objectEvent, struct Sprite * sprite, bool8 stillReflection)
+{
+ struct Sprite * reflectionSprite;
+
+ reflectionSprite = &gSprites[CreateCopySpriteAt(sprite, sprite->pos1.x, sprite->pos1.y, 0x98)];
+ reflectionSprite->callback = UpdateObjectReflectionSprite;
+ reflectionSprite->oam.priority = 3;
+ reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[reflectionSprite->oam.paletteNum];
+ reflectionSprite->usingSheet = TRUE;
+ reflectionSprite->anims = gDummySpriteAnimTable;
+ StartSpriteAnim(reflectionSprite, 0);
+ reflectionSprite->affineAnims = gDummySpriteAffineAnimTable;
+ reflectionSprite->affineAnimBeginning = TRUE;
+ reflectionSprite->subspriteMode = SUBSPRITES_OFF;
+ reflectionSprite->data[0] = sprite->data[0];
+ reflectionSprite->data[1] = objectEvent->localId;
+ reflectionSprite->data[7] = stillReflection;
+ LoadObjectReflectionPalette(objectEvent, reflectionSprite);
+
+ if (!stillReflection)
+ reflectionSprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
+}
+
+static s16 GetReflectionVerticalOffset(struct ObjectEvent * objectEvent)
+{
+ return GetObjectEventGraphicsInfo(objectEvent->graphicsId)->height - 2;
+}
+
+static void LoadObjectReflectionPalette(struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ u8 bridgeType;
+ u16 bridgeReflectionVerticalOffsets[] = { 12, 28, 44 };
+ sprite->data[2] = 0;
+ if (!GetObjectEventGraphicsInfo(objectEvent->graphicsId)->disableReflectionPaletteLoad && ((bridgeType = MetatileBehavior_GetBridgeType(objectEvent->previousMetatileBehavior)) || (bridgeType = MetatileBehavior_GetBridgeType(objectEvent->currentMetatileBehavior))))
+ {
+ sprite->data[2] = bridgeReflectionVerticalOffsets[bridgeType - 1];
+ LoadObjectHighBridgeReflectionPalette(objectEvent, sprite->oam.paletteNum);
+ }
+ else
+ {
+ LoadObjectRegularReflectionPalette(objectEvent, sprite->oam.paletteNum);
+ }
+}
+
+static void LoadObjectRegularReflectionPalette(struct ObjectEvent * objectEvent, u8 paletteIndex)
+{
+ const struct ObjectEventGraphicsInfo * graphicsInfo;
+
+ graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
+ if (graphicsInfo->paletteTag2 != OBJ_EVENT_PAL_TAG_NONE)
+ {
+ if (graphicsInfo->paletteSlot == 0)
+ {
+ LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag1, paletteIndex);
+ }
+ else if (graphicsInfo->paletteSlot == 10)
+ {
+ LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, paletteIndex);
+ }
+ else
+ {
+ PatchObjectPalette(GetObjectPaletteTag(paletteIndex), paletteIndex);
+ }
+ UpdateSpritePaletteWithWeather(paletteIndex);
+ }
+}
+
+// When walking on a bridge high above water (Route 120), the reflection is a solid dark blue color.
+// This is so the sprite blends in with the dark water metatile underneath the bridge.
+static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent * objectEvent, u8 paletteNum)
+{
+ const struct ObjectEventGraphicsInfo * graphicsInfo;
+
+ graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
+ if (graphicsInfo->paletteTag2 != OBJ_EVENT_PAL_TAG_NONE)
+ {
+ PatchObjectPalette(graphicsInfo->paletteTag2, paletteNum);
+ UpdateSpritePaletteWithWeather(paletteNum);
+ }
+}
+
+static void UpdateObjectReflectionSprite(struct Sprite * reflectionSprite)
+{
+ struct ObjectEvent * objectEvent;
+ struct Sprite * mainSprite;
+
+ objectEvent = &gObjectEvents[reflectionSprite->data[0]];
+ mainSprite = &gSprites[objectEvent->spriteId];
+ if (!objectEvent->active || !objectEvent->hasReflection || objectEvent->localId != reflectionSprite->data[1])
+ {
+ reflectionSprite->inUse = FALSE;
+ }
+ else
+ {
+ reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[mainSprite->oam.paletteNum];
+ reflectionSprite->oam.shape = mainSprite->oam.shape;
+ reflectionSprite->oam.size = mainSprite->oam.size;
+ reflectionSprite->oam.matrixNum = mainSprite->oam.matrixNum | ST_OAM_VFLIP;
+ reflectionSprite->oam.tileNum = mainSprite->oam.tileNum;
+ reflectionSprite->subspriteTables = mainSprite->subspriteTables;
+ reflectionSprite->subspriteTableNum = mainSprite->subspriteTableNum;
+ reflectionSprite->invisible = mainSprite->invisible;
+ reflectionSprite->pos1.x = mainSprite->pos1.x;
+ // reflectionSprite->data[2] holds an additional vertical offset, used by the high bridges on Route 120
+ reflectionSprite->pos1.y = mainSprite->pos1.y + GetReflectionVerticalOffset(objectEvent) + reflectionSprite->data[2];
+ reflectionSprite->centerToCornerVecX = mainSprite->centerToCornerVecX;
+ reflectionSprite->centerToCornerVecY = mainSprite->centerToCornerVecY;
+ reflectionSprite->pos2.x = mainSprite->pos2.x;
+ reflectionSprite->pos2.y = -mainSprite->pos2.y;
+ reflectionSprite->coordOffsetEnabled = mainSprite->coordOffsetEnabled;
+
+/*
+ if (objectEvent->hideReflection == TRUE)
+ reflectionSprite->invisible = TRUE;
+*/
+
+ // Check if the reflection is not still.
+ if (reflectionSprite->data[7] == FALSE)
+ {
+ // Sets the reflection sprite's rot/scale matrix to the appropriate
+ // matrix based on whether or not the main sprite is horizontally flipped.
+ // If the sprite is facing to the east, then it is flipped, and its matrixNum is 8.
+ reflectionSprite->oam.matrixNum = 0;
+ if (mainSprite->oam.matrixNum & ST_OAM_HFLIP)
+ reflectionSprite->oam.matrixNum = 1;
+ }
+ }
+}
+
+extern const struct SpriteTemplate * const gFieldEffectObjectTemplatePointers[];
+
+u8 CreateWarpArrowSprite(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8], 0, 0, 0x52);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->oam.priority = 1;
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->invisible = TRUE;
+ }
+ return spriteId;
+}
+
+void SetSpriteInvisible(u8 spriteId)
+{
+ gSprites[spriteId].invisible = TRUE;
+}
+
+void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y)
+{
+ s16 x2;
+ s16 y2;
+ struct Sprite * sprite;
+
+ sprite = &gSprites[spriteId];
+ if (sprite->invisible || sprite->data[0] != x || sprite->data[1] != y)
+ {
+ SetSpritePosToMapCoords(x, y, &x2, &y2);
+ sprite = &gSprites[spriteId];
+ sprite->pos1.x = x2 + 8;
+ sprite->pos1.y = y2 + 8;
+ sprite->invisible = FALSE;
+ sprite->data[0] = x;
+ sprite->data[1] = y;
+ StartSpriteAnim(sprite, direction - 1);
+ }
+}
+
+const u8 gShadowEffectTemplateIds[] = {
+ 0,
+ 1,
+ 2,
+ 3
+};
+
+const u16 gShadowVerticalOffsets[] = {
+ 4,
+ 4,
+ 4,
+ 16
+};
+
+u32 FldEff_Shadow(void)
+{
+ u8 objectEventId;
+ const struct ObjectEventGraphicsInfo * graphicsInfo;
+ u8 spriteId;
+
+ objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[gShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gSprites[spriteId].data[0] = gFieldEffectArguments[0];
+ gSprites[spriteId].data[1] = gFieldEffectArguments[1];
+ gSprites[spriteId].data[2] = gFieldEffectArguments[2];
+ gSprites[spriteId].data[3] = (graphicsInfo->height >> 1) - gShadowVerticalOffsets[graphicsInfo->shadowSize];
+ }
+ return 0;
+}
+
+void UpdateShadowFieldEffect(struct Sprite * sprite)
+{
+ u8 objectEventId;
+ struct ObjectEvent * objectEvent;
+ struct Sprite * linkedSprite;
+
+ if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId))
+ {
+ FieldEffectStop(sprite, FLDEFF_SHADOW);
+ }
+ else
+ {
+ objectEvent = &gObjectEvents[objectEventId];
+ linkedSprite = &gSprites[objectEvent->spriteId];
+ sprite->oam.priority = linkedSprite->oam.priority;
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = linkedSprite->pos1.y + sprite->data[3];
+ if (!objectEvent->active || !objectEvent->hasShadow
+ || MetatileBehavior_IsTallGrass(objectEvent->currentMetatileBehavior)
+ || MetatileBehavior_IsSurfable(objectEvent->currentMetatileBehavior)
+ || MetatileBehavior_IsSurfable(objectEvent->previousMetatileBehavior)
+ || MetatileBehavior_IsReflective(objectEvent->currentMetatileBehavior)
+ || MetatileBehavior_IsReflective(objectEvent->previousMetatileBehavior))
+ {
+ FieldEffectStop(sprite, FLDEFF_SHADOW);
+ }
+ }
+}
+
+u32 FldEff_TallGrass(void)
+{
+ s16 x;
+ s16 y;
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ x = gFieldEffectArguments[0];
+ y = gFieldEffectArguments[1];
+ sub_8063BC4(&x, &y, 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = gFieldEffectArguments[0];
+ sprite->data[2] = gFieldEffectArguments[1];
+ sprite->data[3] = gFieldEffectArguments[4];
+ sprite->data[4] = gFieldEffectArguments[5];
+ sprite->data[5] = gFieldEffectArguments[6];
+ if (gFieldEffectArguments[7])
+ {
+ SeekSpriteAnim(sprite, 4);
+ }
+ }
+ return 0;
+}
+
+void UpdateTallGrassFieldEffect(struct Sprite * sprite)
+{
+ u8 mapNum;
+ u8 mapGroup;
+ u8 metatileBehavior;
+ u8 localId;
+ u8 objectEventId;
+ struct ObjectEvent * objectEvent;
+
+ mapNum = sprite->data[5] >> 8;
+ mapGroup = sprite->data[5];
+ if (gCamera.active && (gSaveBlock1Ptr->location.mapNum != mapNum || gSaveBlock1Ptr->location.mapGroup != mapGroup))
+ {
+ sprite->data[1] -= gCamera.x;
+ sprite->data[2] -= gCamera.y;
+ sprite->data[5] = ((u8)gSaveBlock1Ptr->location.mapNum << 8) | (u8)gSaveBlock1Ptr->location.mapGroup;
+ }
+ localId = sprite->data[3] >> 8;
+ mapNum = sprite->data[3];
+ mapGroup = sprite->data[4];
+ metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data[1], sprite->data[2]);
+ if (TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId) || !MetatileBehavior_IsTallGrass_2(metatileBehavior) || (sprite->data[7] && sprite->animEnded))
+ {
+ FieldEffectStop(sprite, FLDEFF_TALL_GRASS);
+ }
+ else
+ {
+ objectEvent = &gObjectEvents[objectEventId];
+ if ((objectEvent->currentCoords.x != sprite->data[1] || objectEvent->currentCoords.y != sprite->data[2]) && (objectEvent->previousCoords.x != sprite->data[1] || objectEvent->previousCoords.y != sprite->data[2]))
+ sprite->data[7] = TRUE;
+
+ // This variable is misused.
+ metatileBehavior = 0;
+ if (sprite->animCmdIndex == 0)
+ metatileBehavior = 4;
+
+ UpdateObjectEventSpriteVisibility(sprite, 0);
+ sub_80DCD48(sprite, sprite->data[0], metatileBehavior);
+ }
+}
+
+u32 FldEff_JumpTallGrass(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[10], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = 12;
+ }
+ return 0;
+}
+
+u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y)
+{
+ struct Sprite * sprite;
+ u8 i;
+
+ for (i = 0; i < MAX_SPRITES; i++)
+ {
+ if (gSprites[i].inUse)
+ {
+ sprite = &gSprites[i];
+ if (sprite->callback == UpdateTallGrassFieldEffect && (x == sprite->data[1] && y == sprite->data[2]) && (localId == (sprite->data[3] >> 8) && mapNum == (sprite->data[3] & 0xFF) && mapGroup == sprite->data[4]))
+ return i;
+ }
+ }
+
+ return MAX_SPRITES;
+}
+
+u32 FldEff_LongGrass(void)
+{
+ s16 x;
+ s16 y;
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ x = gFieldEffectArguments[0];
+ y = gFieldEffectArguments[1];
+ sub_8063BC4(&x, &y, 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = ZCoordToPriority(gFieldEffectArguments[2]);
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = gFieldEffectArguments[0];
+ sprite->data[2] = gFieldEffectArguments[1];
+ sprite->data[3] = gFieldEffectArguments[4];
+ sprite->data[4] = gFieldEffectArguments[5];
+ sprite->data[5] = gFieldEffectArguments[6];
+ if (gFieldEffectArguments[7])
+ {
+ SeekSpriteAnim(sprite, 6);
+ }
+ }
+ return 0;
+}
+
+void UpdateLongGrassFieldEffect(struct Sprite * sprite)
+{
+ u8 mapNum;
+ u8 mapGroup;
+ u8 metatileBehavior;
+ u8 localId;
+ u8 objectEventId;
+ struct ObjectEvent * objectEvent;
+
+ mapNum = sprite->data[5] >> 8;
+ mapGroup = sprite->data[5];
+ if (gCamera.active && (gSaveBlock1Ptr->location.mapNum != mapNum || gSaveBlock1Ptr->location.mapGroup != mapGroup))
+ {
+ sprite->data[1] -= gCamera.x;
+ sprite->data[2] -= gCamera.y;
+ sprite->data[5] = ((u8)gSaveBlock1Ptr->location.mapNum << 8) | (u8)gSaveBlock1Ptr->location.mapGroup;
+ }
+ localId = sprite->data[3] >> 8;
+ mapNum = sprite->data[3];
+ mapGroup = sprite->data[4];
+ metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data[1], sprite->data[2]);
+ if (TryGetObjectEventIdByLocalIdAndMap(localId, mapNum, mapGroup, &objectEventId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->data[7] && sprite->animEnded))
+ {
+ FieldEffectStop(sprite, FLDEFF_LONG_GRASS);
+ }
+ else
+ {
+ objectEvent = &gObjectEvents[objectEventId];
+ if ((objectEvent->currentCoords.x != sprite->data[1] || objectEvent->currentCoords.y != sprite->data[2]) && (objectEvent->previousCoords.x != sprite->data[1] || objectEvent->previousCoords.y != sprite->data[2]))
+ {
+ sprite->data[7] = TRUE;
+ }
+ UpdateObjectEventSpriteVisibility(sprite, 0);
+ sub_80DCD48(sprite, sprite->data[0], 0);
+ }
+}
+
+u32 FldEff_JumpLongGrass(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[16], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = 18;
+ }
+ return 0;
+}
+
+u32 FldEff_ShortGrass(void)
+{
+ u8 objectEventId;
+ struct ObjectEvent * objectEvent;
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ objectEvent = &gObjectEvents[objectEventId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[30], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &(gSprites[spriteId]);
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gSprites[objectEvent->spriteId].oam.priority;
+ sprite->data[0] = gFieldEffectArguments[0];
+ sprite->data[1] = gFieldEffectArguments[1];
+ sprite->data[2] = gFieldEffectArguments[2];
+ sprite->data[3] = gSprites[objectEvent->spriteId].pos1.x;
+ sprite->data[4] = gSprites[objectEvent->spriteId].pos1.y;
+ }
+ return 0;
+}
+
+void UpdateShortGrassFieldEffect(struct Sprite * sprite)
+{
+ u8 objectEventId;
+ s16 x;
+ s16 y;
+ const struct ObjectEventGraphicsInfo * graphicsInfo;
+ struct Sprite * linkedSprite;
+
+ if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId) || !gObjectEvents[objectEventId].inShortGrass)
+ {
+ FieldEffectStop(sprite, FLDEFF_SHORT_GRASS);
+ }
+ else
+ {
+ graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId);
+ linkedSprite = &gSprites[gObjectEvents[objectEventId].spriteId];
+ y = linkedSprite->pos1.y;
+ x = linkedSprite->pos1.x;
+ if (x != sprite->data[3] || y != sprite->data[4])
+ {
+ sprite->data[3] = x;
+ sprite->data[4] = y;
+ if (sprite->animEnded)
+ {
+ StartSpriteAnim(sprite, 0);
+ }
+ }
+ sprite->pos1.x = x;
+ sprite->pos1.y = y;
+ sprite->pos2.y = (graphicsInfo->height >> 1) - 8;
+ sprite->subpriority = linkedSprite->subpriority - 1;
+ sprite->oam.priority = linkedSprite->oam.priority;
+ UpdateObjectEventSpriteVisibility(sprite, linkedSprite->invisible);
+ }
+}
+
+u32 FldEff_SandFootprints(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[11], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[7] = FLDEFF_SAND_FOOTPRINTS;
+ StartSpriteAnim(sprite, gFieldEffectArguments[4]);
+ }
+ return 0;
+}
+
+u32 FldEff_DeepSandFootprints(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[23], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[7] = FLDEFF_DEEP_SAND_FOOTPRINTS;
+ StartSpriteAnim(sprite, gFieldEffectArguments[4]);
+ }
+ return spriteId;
+}
+
+u32 FldEff_BikeTireTracks(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[27], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[7] = FLDEFF_BIKE_TIRE_TRACKS;
+ StartSpriteAnim(sprite, gFieldEffectArguments[4]);
+ }
+ return spriteId;
+}
+
+void (*const gFadeFootprintsTireTracksFuncs[])(struct Sprite * sprite) = {
+ FadeFootprintsTireTracks_Step0,
+ FadeFootprintsTireTracks_Step1
+};
+
+void UpdateFootprintsTireTracksFieldEffect(struct Sprite * sprite)
+{
+ gFadeFootprintsTireTracksFuncs[sprite->data[0]](sprite);
+}
+
+static void FadeFootprintsTireTracks_Step0(struct Sprite * sprite)
+{
+ // Wait 40 frames before the flickering starts.
+ if (++sprite->data[1] > 40)
+ sprite->data[0] = 1;
+
+ UpdateObjectEventSpriteVisibility(sprite, FALSE);
+}
+
+static void FadeFootprintsTireTracks_Step1(struct Sprite * sprite)
+{
+ sprite->invisible ^= 1;
+ sprite->data[1]++;
+ UpdateObjectEventSpriteVisibility(sprite, sprite->invisible);
+ if (sprite->data[1] > 56)
+ {
+ FieldEffectStop(sprite, sprite->data[7]);
+ }
+}
+
+u32 FldEff_Splash(void)
+{
+ u8 objectEventId;
+ struct ObjectEvent * objectEvent;
+ u8 spriteId;
+ struct Sprite * sprite;
+ const struct ObjectEventGraphicsInfo * graphicsInfo;
+ struct Sprite * linkedSprite;
+
+ objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ objectEvent = &gObjectEvents[objectEventId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ linkedSprite = &gSprites[objectEvent->spriteId];
+ sprite->oam.priority = linkedSprite->oam.priority;
+ sprite->data[0] = gFieldEffectArguments[0];
+ sprite->data[1] = gFieldEffectArguments[1];
+ sprite->data[2] = gFieldEffectArguments[2];
+ sprite->pos2.y = (graphicsInfo->height >> 1) - 4;
+ PlaySE(SE_MIZU);
+ }
+ return 0;
+}
+
+void UpdateSplashFieldEffect(struct Sprite * sprite)
+{
+ u8 objectEventId;
+
+ if (sprite->animEnded || TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId))
+ {
+ FieldEffectStop(sprite, FLDEFF_SPLASH);
+ }
+ else
+ {
+ sprite->pos1.x = gSprites[gObjectEvents[objectEventId].spriteId].pos1.x;
+ sprite->pos1.y = gSprites[gObjectEvents[objectEventId].spriteId].pos1.y;
+ UpdateObjectEventSpriteVisibility(sprite, FALSE);
+ }
+}
+
+u32 FldEff_JumpSmallSplash(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[14], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = FLDEFF_JUMP_SMALL_SPLASH;
+ }
+ return 0;
+}
+
+u32 FldEff_JumpBigSplash(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[12], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = FLDEFF_JUMP_BIG_SPLASH;
+ }
+ return 0;
+}
+
+u32 FldEff_FeetInFlowingWater(void)
+{
+ u8 objectEventId;
+ struct ObjectEvent * objectEvent;
+ u8 spriteId;
+ struct Sprite * sprite;
+ const struct ObjectEventGraphicsInfo * graphicsInfo;
+
+ objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ objectEvent = &gObjectEvents[objectEventId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
+ sprite = &gSprites[spriteId];
+ sprite->callback = UpdateFeetInFlowingWaterFieldEffect;
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gSprites[objectEvent->spriteId].oam.priority;
+ sprite->data[0] = gFieldEffectArguments[0];
+ sprite->data[1] = gFieldEffectArguments[1];
+ sprite->data[2] = gFieldEffectArguments[2];
+ sprite->data[3] = -1;
+ sprite->data[4] = -1;
+ sprite->pos2.y = (graphicsInfo->height >> 1) - 4;
+ StartSpriteAnim(sprite, 1);
+ }
+ return 0;
+}
+
+static void UpdateFeetInFlowingWaterFieldEffect(struct Sprite * sprite)
+{
+ u8 objectEventId;
+ struct Sprite * linkedSprite;
+ struct ObjectEvent * objectEvent;
+
+ if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId) || !gObjectEvents[objectEventId].inShallowFlowingWater)
+ {
+ FieldEffectStop(sprite, FLDEFF_FEET_IN_FLOWING_WATER);
+ }
+ else
+ {
+ objectEvent = &gObjectEvents[objectEventId];
+ linkedSprite = &gSprites[objectEvent->spriteId];
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = linkedSprite->pos1.y;
+ sprite->subpriority = linkedSprite->subpriority;
+ UpdateObjectEventSpriteVisibility(sprite, FALSE);
+ if (objectEvent->currentCoords.x != sprite->data[3] || objectEvent->currentCoords.y != sprite->data[4])
+ {
+ sprite->data[3] = objectEvent->currentCoords.x;
+ sprite->data[4] = objectEvent->currentCoords.y;
+ if (!sprite->invisible)
+ {
+ PlaySE(SE_MIZU);
+ }
+ }
+ }
+}
+
+u32 FldEff_Ripple(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[5], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[0] = FLDEFF_RIPPLE;
+ }
+ return 0;
+}
+
+u32 FldEff_HotSpringsWater(void)
+{
+ u8 objectEventId;
+ struct ObjectEvent * objectEvent;
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ objectEvent = &gObjectEvents[objectEventId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[31], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gSprites[objectEvent->spriteId].oam.priority;
+ sprite->data[0] = gFieldEffectArguments[0];
+ sprite->data[1] = gFieldEffectArguments[1];
+ sprite->data[2] = gFieldEffectArguments[2];
+ sprite->data[3] = gSprites[objectEvent->spriteId].pos1.x;
+ sprite->data[4] = gSprites[objectEvent->spriteId].pos1.y;
+ }
+ return 0;
+}
+
+void UpdateHotSpringsWaterFieldEffect(struct Sprite * sprite)
+{
+ u8 objectEventId;
+ const struct ObjectEventGraphicsInfo * graphicsInfo;
+ struct Sprite * linkedSprite;
+
+ if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId) || !gObjectEvents[objectEventId].inHotSprings)
+ {
+ FieldEffectStop(sprite, FLDEFF_HOT_SPRINGS_WATER);
+ }
+ else
+ {
+ graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId);
+ linkedSprite = &gSprites[gObjectEvents[objectEventId].spriteId];
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = (graphicsInfo->height >> 1) + linkedSprite->pos1.y - 8;
+ sprite->subpriority = linkedSprite->subpriority - 1;
+ UpdateObjectEventSpriteVisibility(sprite, FALSE);
+ }
+}
+
+u32 FldEff_Unknown19(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[0] = FLDEFF_UNKNOWN_19;
+ }
+ return 0;
+}
+
+u32 FldEff_Unknown20(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[0] = FLDEFF_UNKNOWN_20;
+ }
+ return 0;
+}
+
+u32 FldEff_Unknown21(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[0] = FLDEFF_UNKNOWN_21;
+ }
+ return 0;
+}
+
+u32 FldEff_Unknown22(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[0] = FLDEFF_UNKNOWN_22;
+ }
+ return 0;
+}
+
+void StartAshFieldEffect(s16 x, s16 y, u16 metatileId, s16 d)
+{
+ gFieldEffectArguments[0] = x;
+ gFieldEffectArguments[1] = y;
+ gFieldEffectArguments[2] = 0x52;
+ gFieldEffectArguments[3] = 1;
+ gFieldEffectArguments[4] = metatileId;
+ gFieldEffectArguments[5] = d;
+ FieldEffectStart(FLDEFF_ASH);
+}
+
+u32 FldEff_Ash(void)
+{
+ s16 x;
+ s16 y;
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ x = gFieldEffectArguments[0];
+ y = gFieldEffectArguments[1];
+ sub_8063BC4(&x, &y, 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[1] = gFieldEffectArguments[0];
+ sprite->data[2] = gFieldEffectArguments[1];
+ sprite->data[3] = gFieldEffectArguments[4];
+ sprite->data[4] = gFieldEffectArguments[5];
+ }
+ return 0;
+}
+
+void (*const gAshFieldEffectFuncs[])(struct Sprite * sprite) = {
+ UpdateAshFieldEffect_Step0,
+ UpdateAshFieldEffect_Step1,
+ UpdateAshFieldEffect_Step2
+};
+
+void UpdateAshFieldEffect(struct Sprite * sprite)
+{
+ gAshFieldEffectFuncs[sprite->data[0]](sprite);
+}
+
+static void UpdateAshFieldEffect_Step0(struct Sprite * sprite)
+{
+ sprite->invisible = TRUE;
+ sprite->animPaused = TRUE;
+ if (--sprite->data[4] == 0)
+ sprite->data[0] = 1;
+}
+
+static void UpdateAshFieldEffect_Step1(struct Sprite * sprite)
+{
+ sprite->invisible = FALSE;
+ sprite->animPaused = FALSE;
+ MapGridSetMetatileIdAt(sprite->data[1], sprite->data[2], sprite->data[3]);
+ CurrentMapDrawMetatileAt(sprite->data[1], sprite->data[2]);
+ gObjectEvents[gPlayerAvatar.objectEventId].triggerGroundEffectsOnMove = TRUE;
+ sprite->data[0] = 2;
+}
+
+static void UpdateAshFieldEffect_Step2(struct Sprite * sprite)
+{
+ UpdateObjectEventSpriteVisibility(sprite, FALSE);
+ if (sprite->animEnded)
+ FieldEffectStop(sprite, FLDEFF_ASH);
+}
+
+u32 FldEff_SurfBlob(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[7], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96);
+ if (spriteId !=MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.paletteNum = 0;
+ sprite->data[2] = gFieldEffectArguments[2];
+ sprite->data[3] = 0;
+ sprite->data[6] = -1;
+ sprite->data[7] = -1;
+ }
+ FieldEffectActiveListRemove(FLDEFF_SURF_BLOB);
+ return spriteId;
+}
+
+void sub_80DC44C(u8 spriteId, u8 value)
+{
+ gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF) | (value & 0xF);
+}
+
+void sub_80DC478(u8 spriteId, u8 value)
+{
+ gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF0) | ((value & 0xF) << 4);
+}
+
+void sub_80DC4A4(u8 spriteId, u8 value, s16 data1)
+{
+ gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF00) | ((value & 0xF) << 8);
+ gSprites[spriteId].data[1] = data1;
+}
+
+static u8 sub_80DC4D8(struct Sprite * sprite)
+{
+ return sprite->data[0] & 0xF;
+}
+
+static u8 sub_80DC4E0(struct Sprite * sprite)
+{
+ return (sprite->data[0] & 0xF0) >> 4;
+}
+
+static u8 sub_80DC4EC(struct Sprite * sprite)
+{
+ return (sprite->data[0] & 0xF00) >> 8;
+}
+
+void UpdateSurfBlobFieldEffect(struct Sprite * sprite)
+{
+ struct ObjectEvent * objectEvent;
+ struct Sprite * linkedSprite;
+
+ objectEvent = &gObjectEvents[sprite->data[2]];
+ linkedSprite = &gSprites[objectEvent->spriteId];
+ SynchroniseSurfAnim(objectEvent, sprite);
+ sub_80DC588(objectEvent, sprite);
+ CreateBobbingEffect(objectEvent, linkedSprite, sprite);
+ sprite->oam.priority = linkedSprite->oam.priority;
+}
+
+static void SynchroniseSurfAnim(struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ u8 surfBlobDirectionAnims[] = {
+ [DIR_NONE] = 0,
+ [DIR_SOUTH] = 0,
+ [DIR_NORTH] = 1,
+ [DIR_WEST] = 2,
+ [DIR_EAST] = 3
+ };
+
+ if (sub_80DC4E0(sprite) == 0)
+ StartSpriteAnimIfDifferent(sprite, surfBlobDirectionAnims[objectEvent->movementDirection]);
+}
+
+void sub_80DC588(struct ObjectEvent * objectEvent, struct Sprite * sprite)
+{
+ u8 i;
+ s16 x = objectEvent->currentCoords.x;
+ s16 y = objectEvent->currentCoords.y;
+ s32 spriteY = sprite->pos2.y;
+
+ if (spriteY == 0 && (x != sprite->data[6] || y != sprite->data[7]))
+ {
+ sprite->data[5] = spriteY;
+ sprite->data[6] = x;
+ sprite->data[7] = y;
+ for (i = DIR_SOUTH; i <= DIR_EAST; i++, x = sprite->data[6], y = sprite->data[7])
+ {
+ MoveCoords(i, &x, &y);
+ if (MapGridGetZCoordAt(x, y) == 3)
+ {
+ sprite->data[5]++;
+ break;
+ }
+ }
+ }
+}
+
+static void CreateBobbingEffect(struct ObjectEvent * objectEvent, struct Sprite * linkedSprite, struct Sprite * sprite)
+{
+ u16 unk_83FECFA[] = {7, 15};
+ u8 v0 = sub_80DC4D8(sprite);
+ if (v0 != 0)
+ {
+ if (((u16)(++ sprite->data[4]) & unk_83FECFA[sprite->data[5]]) == 0)
+ {
+ sprite->pos2.y += sprite->data[3];
+ }
+ if ((sprite->data[4] & 0x1F) == 0)
+ {
+ sprite->data[3] = -sprite->data[3];
+ }
+ if (v0 != 2)
+ {
+ if (sub_80DC4EC(sprite) == 0)
+ linkedSprite->pos2.y = sprite->pos2.y;
+ else
+ linkedSprite->pos2.y = sprite->data[1] + sprite->pos2.y;
+ if (sprite->animCmdIndex != 0)
+ linkedSprite->pos2.y++;
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = linkedSprite->pos1.y + 8;
+ }
+ }
+}
+
+u8 sub_80DC6B0(u8 oldSpriteId)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ spriteId = CreateSpriteAtEnd(&gDummySpriteTemplate, 0, 0, -1);
+ sprite = &gSprites[spriteId];
+ sprite->callback = sub_80DC700;
+ sprite->invisible = TRUE;
+ sprite->data[0] = oldSpriteId;
+ sprite->data[1] = 1;
+ return spriteId;
+}
+
+static void sub_80DC700(struct Sprite * sprite)
+{
+ struct Sprite * oldSprite;
+
+ oldSprite = &gSprites[sprite->data[0]];
+ if (((sprite->data[2]++) & 0x03) == 0)
+ {
+ oldSprite->pos2.y += sprite->data[1];
+ }
+ if ((sprite->data[2] & 0x0F) == 0)
+ {
+ sprite->data[1] = -sprite->data[1];
+ }
+}
+
+u32 FldEff_Dust(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[9], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[0] = gFieldEffectArguments[2];
+ sprite->data[1] = 10;
+ }
+ return 0;
+}
+
+u32 FldEff_SandPile(void)
+{
+ u8 objectEventId;
+ struct ObjectEvent * objectEvent;
+ u8 spriteId;
+ struct Sprite * sprite;
+ const struct ObjectEventGraphicsInfo * graphicsInfo;
+
+ objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ objectEvent = &gObjectEvents[objectEventId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[29], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gSprites[objectEvent->spriteId].oam.priority;
+ sprite->data[0] = gFieldEffectArguments[0];
+ sprite->data[1] = gFieldEffectArguments[1];
+ sprite->data[2] = gFieldEffectArguments[2];
+ sprite->data[3] = gSprites[objectEvent->spriteId].pos1.x;
+ sprite->data[4] = gSprites[objectEvent->spriteId].pos1.y;
+ sprite->pos2.y = (graphicsInfo->height >> 1) - 2;
+ SeekSpriteAnim(sprite, 2);
+ }
+ return 0;
+}
+
+void UpdateSandPileFieldEffect(struct Sprite * sprite)
+{
+ u8 objectEventId;
+ s16 x;
+ s16 y;
+
+ if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &objectEventId) || !gObjectEvents[objectEventId].inSandPile)
+ {
+ FieldEffectStop(sprite, FLDEFF_SAND_PILE);
+ }
+ else
+ {
+ y = gSprites[gObjectEvents[objectEventId].spriteId].pos1.y;
+ x = gSprites[gObjectEvents[objectEventId].spriteId].pos1.x;
+ if (x != sprite->data[3] || y != sprite->data[4])
+ {
+ sprite->data[3] = x;
+ sprite->data[4] = y;
+ if (sprite->animEnded)
+ {
+ StartSpriteAnim(sprite, 0);
+ }
+ }
+ sprite->pos1.x = x;
+ sprite->pos1.y = y;
+ sprite->subpriority = gSprites[gObjectEvents[objectEventId].spriteId].subpriority;
+ UpdateObjectEventSpriteVisibility(sprite, FALSE);
+ }
+}
+
+u32 FldEff_Bubbles(void)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[34], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = 1;
+ }
+ return 0;
+}
+
+void UpdateBubblesFieldEffect(struct Sprite * sprite)
+{
+ sprite->data[0] += 0x80;
+ sprite->data[0] &= 0x100;
+ sprite->pos1.y -= sprite->data[0] >> 8;
+ UpdateObjectEventSpriteVisibility(sprite, FALSE);
+ if (sprite->invisible || sprite->animEnded)
+ {
+ FieldEffectStop(sprite, FLDEFF_BUBBLES);
+ }
+}
+
+u32 FldEff_BerryTreeGrowthSparkle(void)
+{
+ /*u8 spriteId;
+ struct Sprite * sprite;
+
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->oam.paletteNum = 5;
+ sprite->data[0] = FLDEFF_BERRY_TREE_GROWTH_SPARKLE;
+ }*/
+ return 0;
+}
+
+u32 ShowTreeDisguiseFieldEffect(void)
+{
+ return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, 24, 4);
+}
+
+u32 ShowMountainDisguiseFieldEffect(void)
+{
+ return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, 25, 3);
+}
+
+u32 ShowSandDisguiseFieldEffect(void)
+{
+ return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 28, 2);
+}
+
+static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum)
+{
+ u8 spriteId;
+ struct Sprite * sprite;
+
+ if (TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &spriteId))
+ {
+ FieldEffectActiveListRemove(fldEff);
+ return MAX_SPRITES;
+ }
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[templateIdx], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled++;
+ sprite->oam.paletteNum = paletteNum;
+ sprite->data[1] = fldEff;
+ sprite->data[2] = gFieldEffectArguments[0];
+ sprite->data[3] = gFieldEffectArguments[1];
+ sprite->data[4] = gFieldEffectArguments[2];
+ }
+ return spriteId;
+}
+
+void UpdateDisguiseFieldEffect(struct Sprite * sprite)
+{
+ u8 objectEventId;
+ const struct ObjectEventGraphicsInfo * graphicsInfo;
+ struct Sprite * linkedSprite;
+
+ if (TryGetObjectEventIdByLocalIdAndMap(sprite->data[2], sprite->data[3], sprite->data[4], &objectEventId))
+ {
+ FieldEffectStop(sprite, sprite->data[1]);
+ }
+
+ graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId);
+ linkedSprite = &gSprites[gObjectEvents[objectEventId].spriteId];
+ sprite->invisible = linkedSprite->invisible;
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = (graphicsInfo->height >> 1) + linkedSprite->pos1.y - 16;
+ sprite->subpriority = linkedSprite->subpriority - 1;
+ if (sprite->data[0] == 1)
+ {
+ sprite->data[0]++;
+ StartSpriteAnim(sprite, 1);
+ }
+ if (sprite->data[0] == 2 && sprite->animEnded)
+ {
+ sprite->data[7] = 1;
+ }
+ if (sprite->data[0] == 3)
+ {
+ FieldEffectStop(sprite, sprite->data[1]);
+ }
+}
+
+void sub_80DCBB8(struct ObjectEvent * objectEvent)
+{
+ if (objectEvent->directionSequenceIndex == 1)
+ {
+ gSprites[objectEvent->fieldEffectSpriteId].data[0]++;
+ }
+}
+
+bool8 sub_80DCBE0(struct ObjectEvent * objectEvent)
+{
+ struct Sprite * sprite;
+
+ if (objectEvent->directionSequenceIndex == 2)
+ {
+ return TRUE;
+ }
+ if (objectEvent->directionSequenceIndex == 0)
+ {
+ return TRUE;
+ }
+ sprite = &gSprites[objectEvent->fieldEffectSpriteId];
+ if (sprite->data[7])
+ {
+ objectEvent->directionSequenceIndex = 2;
+ sprite->data[0]++;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+u32 FldEff_Sparkle(void)
+{
+ u8 spriteId;
+
+ gFieldEffectArguments[0] += 7;
+ gFieldEffectArguments[1] += 7;
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[35], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = gFieldEffectArguments[2];
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ }
+ return 0;
+}
+
+void UpdateSparkleFieldEffect(struct Sprite * sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ if (sprite->animEnded)
+ {
+ sprite->invisible = TRUE;
+ sprite->data[0]++;
+ }
+
+ if (sprite->data[0] == 0)
+ return;
+ }
+
+ if (++sprite->data[1] > 34)
+ FieldEffectStop(sprite, FLDEFF_SPARKLE);
+}
+
+void sub_80DCCE0(struct Sprite * sprite)
+{
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, sprite->data[1]);
+ }
+ else
+ {
+ UpdateObjectEventSpriteVisibility(sprite, FALSE);
+ SetObjectSubpriorityByZCoord(sprite->data[0], sprite, 0);
+ }
+}
+
+void WaitFieldEffectSpriteAnim(struct Sprite * sprite)
+{
+ if (sprite->animEnded)
+ FieldEffectStop(sprite, sprite->data[0]);
+ else
+ UpdateObjectEventSpriteVisibility(sprite, FALSE);
+}
+
+static void sub_80DCD48(struct Sprite * sprite, u8 z, u8 offset)
+{
+ u8 i;
+ s16 var, xhi, lyhi, yhi, ylo;
+ const struct ObjectEventGraphicsInfo * graphicsInfo; // Unused Variable
+ struct Sprite * linkedSprite;
+
+ SetObjectSubpriorityByZCoord(z, sprite, offset);
+ for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
+ {
+ struct ObjectEvent * objectEvent = &gObjectEvents[i];
+ if (objectEvent->active)
+ {
+ graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
+ linkedSprite = &gSprites[objectEvent->spriteId];
+ xhi = sprite->pos1.x + sprite->centerToCornerVecX;
+ var = sprite->pos1.x - sprite->centerToCornerVecX;
+ if (xhi < linkedSprite->pos1.x && var > linkedSprite->pos1.x)
+ {
+ lyhi = linkedSprite->pos1.y + linkedSprite->centerToCornerVecY;
+ var = linkedSprite->pos1.y;
+ ylo = sprite->pos1.y - sprite->centerToCornerVecY;
+ yhi = ylo + linkedSprite->centerToCornerVecY;
+ if ((lyhi < yhi || lyhi < ylo) && var > yhi && sprite->subpriority <= linkedSprite->subpriority)
+ {
+ sprite->subpriority = linkedSprite->subpriority + 2;
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/src/quest_log_objects.c b/src/quest_log_objects.c
index 5676c20fc..7d8300cd7 100644
--- a/src/quest_log_objects.c
+++ b/src/quest_log_objects.c
@@ -39,8 +39,8 @@ void SetQuestLogObjectEventsData(struct QuestLog * questLog)
questLog->unk_008[i].x = gObjectEvents[i].currentCoords.x;
questLog->unk_008[i].y = gObjectEvents[i].currentCoords.y;
questLog->unk_008[i].trainerRange_berryTreeId = gObjectEvents[i].trainerRange_berryTreeId;
- questLog->unk_008[i].mapobj_unk_1F = gObjectEvents[i].mapobj_unk_1F;
- questLog->unk_008[i].mapobj_unk_21 = gObjectEvents[i].mapobj_unk_21;
+ questLog->unk_008[i].previousMetatileBehavior = gObjectEvents[i].previousMetatileBehavior;
+ questLog->unk_008[i].directionSequenceIndex = gObjectEvents[i].directionSequenceIndex;
questLog->unk_008[i].animId = gObjectEvents[i].animId;
}
}
@@ -83,8 +83,8 @@ void sub_815A1F8(const struct QuestLog * questLog, const struct ObjectEventTempl
gObjectEvents[i].currentCoords.x = questLogObjectEvents[i].x;
gObjectEvents[i].currentCoords.y = questLogObjectEvents[i].y;
gObjectEvents[i].trainerRange_berryTreeId = questLogObjectEvents[i].trainerRange_berryTreeId;
- gObjectEvents[i].mapobj_unk_1F = questLogObjectEvents[i].mapobj_unk_1F;
- gObjectEvents[i].mapobj_unk_21 = questLogObjectEvents[i].mapobj_unk_21;
+ gObjectEvents[i].previousMetatileBehavior = questLogObjectEvents[i].previousMetatileBehavior;
+ gObjectEvents[i].directionSequenceIndex = questLogObjectEvents[i].directionSequenceIndex;
gObjectEvents[i].animId = questLogObjectEvents[i].animId;
for (j = 0; j < 0x40; j++)
@@ -98,28 +98,28 @@ void sub_815A1F8(const struct QuestLog * questLog, const struct ObjectEventTempl
}
}
- gObjectEvents[i].mapobj_unk_1E = MapGridGetMetatileBehaviorAt(gObjectEvents[i].currentCoords.x, gObjectEvents[i].currentCoords.y);
- if (gObjectEvents[i].mapobj_unk_1F == MapGridGetMetatileBehaviorAt((s16)(gObjectEvents[i].currentCoords.x), (s16)(gObjectEvents[i].currentCoords.y)))
+ gObjectEvents[i].currentMetatileBehavior = MapGridGetMetatileBehaviorAt(gObjectEvents[i].currentCoords.x, gObjectEvents[i].currentCoords.y);
+ if (gObjectEvents[i].previousMetatileBehavior == MapGridGetMetatileBehaviorAt((s16)(gObjectEvents[i].currentCoords.x), (s16)(gObjectEvents[i].currentCoords.y)))
{
gObjectEvents[i].previousCoords.x = gObjectEvents[i].currentCoords.x;
gObjectEvents[i].previousCoords.y = gObjectEvents[i].currentCoords.y;
}
- else if (gObjectEvents[i].mapobj_unk_1F == MapGridGetMetatileBehaviorAt((s16)(gObjectEvents[i].currentCoords.x - 1), (s16)(gObjectEvents[i].currentCoords.y)))
+ else if (gObjectEvents[i].previousMetatileBehavior == MapGridGetMetatileBehaviorAt((s16)(gObjectEvents[i].currentCoords.x - 1), (s16)(gObjectEvents[i].currentCoords.y)))
{
gObjectEvents[i].previousCoords.x = gObjectEvents[i].currentCoords.x - 1;
gObjectEvents[i].previousCoords.y = gObjectEvents[i].currentCoords.y;
}
- else if (gObjectEvents[i].mapobj_unk_1F == MapGridGetMetatileBehaviorAt((s16)(gObjectEvents[i].currentCoords.x + 1), (s16)(gObjectEvents[i].currentCoords.y)))
+ else if (gObjectEvents[i].previousMetatileBehavior == MapGridGetMetatileBehaviorAt((s16)(gObjectEvents[i].currentCoords.x + 1), (s16)(gObjectEvents[i].currentCoords.y)))
{
gObjectEvents[i].previousCoords.x = gObjectEvents[i].currentCoords.x + 1;
gObjectEvents[i].previousCoords.y = gObjectEvents[i].currentCoords.y;
}
- else if (gObjectEvents[i].mapobj_unk_1F == MapGridGetMetatileBehaviorAt((s16)(gObjectEvents[i].currentCoords.x), (s16)(gObjectEvents[i].currentCoords.y - 1)))
+ else if (gObjectEvents[i].previousMetatileBehavior == MapGridGetMetatileBehaviorAt((s16)(gObjectEvents[i].currentCoords.x), (s16)(gObjectEvents[i].currentCoords.y - 1)))
{
gObjectEvents[i].previousCoords.x = gObjectEvents[i].currentCoords.x;
gObjectEvents[i].previousCoords.y = gObjectEvents[i].currentCoords.y - 1;
}
- else if (gObjectEvents[i].mapobj_unk_1F == MapGridGetMetatileBehaviorAt((s16)(gObjectEvents[i].currentCoords.x), (s16)(gObjectEvents[i].currentCoords.y + 1)))
+ else if (gObjectEvents[i].previousMetatileBehavior == MapGridGetMetatileBehaviorAt((s16)(gObjectEvents[i].currentCoords.x), (s16)(gObjectEvents[i].currentCoords.y + 1)))
{
gObjectEvents[i].previousCoords.x = gObjectEvents[i].currentCoords.x;
gObjectEvents[i].previousCoords.y = gObjectEvents[i].currentCoords.y + 1;
@@ -140,7 +140,7 @@ void sub_815A540(void)
{
struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
SetPlayerAvatarTransitionFlags(0x01);
- DestroySprite(&gSprites[objectEvent->mapobj_unk_1A]);
+ DestroySprite(&gSprites[objectEvent->fieldEffectSpriteId]);
}
}
}
diff --git a/src/quest_log_player.c b/src/quest_log_player.c
index ccf0565fb..b57e3930c 100644
--- a/src/quest_log_player.c
+++ b/src/quest_log_player.c
@@ -58,7 +58,7 @@ static void sub_81504A8(void)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(0));
- ObjectEventTurn(objectEvent, objectEvent->placeholder18);
+ ObjectEventTurn(objectEvent, objectEvent->movementDirection);
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_ON_FOOT);
}
@@ -66,7 +66,7 @@ static void sub_81504E8(void)
{
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(1));
- ObjectEventTurn(objectEvent, objectEvent->placeholder18);
+ ObjectEventTurn(objectEvent, objectEvent->movementDirection);
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_MACH_BIKE);
sub_80BD620(0, 0);
}
@@ -125,7 +125,7 @@ static void sub_81505C4(u8 taskId)
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(0));
else
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
- ObjectEventTurn(objectEvent, objectEvent->placeholder18);
+ ObjectEventTurn(objectEvent, objectEvent->movementDirection);
sprite->pos2.x = 0;
sprite->pos2.y = 0;
ScriptContext2_Disable();
@@ -143,13 +143,13 @@ static void sub_8150708(void)
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING))
{
sub_81507BC(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2));
- ObjectEventTurn(objectEvent, objectEvent->placeholder18);
+ ObjectEventTurn(objectEvent, objectEvent->movementDirection);
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING);
gFieldEffectArguments[0] = objectEvent->currentCoords.x;
gFieldEffectArguments[1] = objectEvent->currentCoords.y;
gFieldEffectArguments[2] = gPlayerAvatar.objectEventId;
fieldEffectId = FieldEffectStart(FLDEFF_SURF_BLOB);
- objectEvent->mapobj_unk_1A = fieldEffectId;
+ objectEvent->fieldEffectSpriteId = fieldEffectId;
sub_80DC44C(fieldEffectId, 1);
}
}