diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2020-03-02 14:11:32 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-02 14:11:32 -0500 |
commit | f5011a27d6c15bb6e3fbb24b680bf5175baffe0e (patch) | |
tree | 0fc5c1ca8df7787c55ce7cb928923123792e9b0a | |
parent | 40af0d130236cccd5127c2f175006168466b405d (diff) | |
parent | e2a29e9db964881034f5c1c0507924e2e0fb7840 (diff) |
Merge pull request #282 from PikalaxALT/field_effect_helpers
port field_effect_helpers from emerald
-rw-r--r-- | asm/event_object_movement.s | 84 | ||||
-rw-r--r-- | asm/field_effect_helpers.s | 4308 | ||||
-rw-r--r-- | asm/field_player_avatar.s | 6 | ||||
-rw-r--r-- | asm/field_weather.s | 8 | ||||
-rw-r--r-- | asm/field_weather_effects.s | 2 | ||||
-rw-r--r-- | asm/overworld.s | 2 | ||||
-rw-r--r-- | data/event_object_movement.s | 52 | ||||
-rw-r--r-- | data/field_effect_helpers.s | 34 | ||||
-rw-r--r-- | data/field_effect_scripts.s | 8 | ||||
-rw-r--r-- | include/event_object_movement.h | 15 | ||||
-rw-r--r-- | include/field_effect_helpers.h | 2 | ||||
-rw-r--r-- | include/field_weather.h | 2 | ||||
-rw-r--r-- | include/global.fieldmap.h | 12 | ||||
-rw-r--r-- | include/global.h | 4 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/field_effect.c | 24 | ||||
-rw-r--r-- | src/field_effect_helpers.c | 1411 | ||||
-rw-r--r-- | src/quest_log_objects.c | 22 | ||||
-rw-r--r-- | src/quest_log_player.c | 10 |
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); } } |