summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/event_object_movement.s1894
-rw-r--r--data/event_object_movement.s63
-rw-r--r--include/event_object_movement.h24
-rw-r--r--include/field_effect_helpers.h3
-rw-r--r--include/field_ground_effect.h24
-rw-r--r--include/metatile_behavior.h16
-rw-r--r--ld_script.txt2
-rw-r--r--src/battle_setup.c2
-rw-r--r--src/event_object_80688E4.c5
-rw-r--r--src/event_object_movement.c942
-rw-r--r--src/metatile_behavior.c18
-rw-r--r--src/trainer_see.c144
12 files changed, 1059 insertions, 2078 deletions
diff --git a/asm/event_object_movement.s b/asm/event_object_movement.s
deleted file mode 100644
index 0b3eb41af..000000000
--- a/asm/event_object_movement.s
+++ /dev/null
@@ -1,1894 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start GetAllGroundEffectFlags_OnSpawn
-GetAllGroundEffectFlags_OnSpawn: @ 8067B34
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl ObjectEventUpdateMetatileBehaviors
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_Reflection
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_TallGrassOnSpawn
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_LongGrassOnSpawn
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_SandHeap
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_ShallowFlowingWater
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_ShortGrass
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_HotSprings
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end GetAllGroundEffectFlags_OnSpawn
-
- thumb_func_start GetAllGroundEffectFlags_OnBeginStep
-GetAllGroundEffectFlags_OnBeginStep: @ 8067B7C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl ObjectEventUpdateMetatileBehaviors
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_Reflection
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_TallGrassOnBeginStep
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_LongGrassOnBeginStep
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_Tracks
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_SandHeap
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_ShallowFlowingWater
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_Puddle
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_ShortGrass
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_HotSprings
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end GetAllGroundEffectFlags_OnBeginStep
-
- thumb_func_start GetAllGroundEffectFlags_OnFinishStep
-GetAllGroundEffectFlags_OnFinishStep: @ 8067BD4
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl ObjectEventUpdateMetatileBehaviors
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_ShallowFlowingWater
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_SandHeap
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_Puddle
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_Ripple
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_ShortGrass
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_HotSprings
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_Seaweed
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetGroundEffectFlags_JumpLanding
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end GetAllGroundEffectFlags_OnFinishStep
-
- thumb_func_start ObjectEventUpdateMetatileBehaviors
-ObjectEventUpdateMetatileBehaviors: @ 8067C24
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- movs r2, 0x16
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- strb r0, [r4, 0x1F]
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- movs r2, 0x12
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- strb r0, [r4, 0x1E]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ObjectEventUpdateMetatileBehaviors
-
- thumb_func_start GetGroundEffectFlags_Reflection
-GetGroundEffectFlags_Reflection: @ 8067C4C
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r0, _08067C90 @ =gUnknown_83A7024
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- adds r0, r4, 0
- bl sub_8067F88
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _08067C94
- ldrb r1, [r4, 0x2]
- lsls r0, r1, 30
- cmp r0, 0
- blt _08067C9E
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4, 0x2]
- subs r0, r2, 0x1
- lsls r0, 2
- add r0, sp
- ldr r1, [r5]
- ldr r0, [r0]
- orrs r1, r0
- str r1, [r5]
- b _08067C9E
- .align 2, 0
-_08067C90: .4byte gUnknown_83A7024
-_08067C94:
- ldrb r1, [r4, 0x2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x2]
-_08067C9E:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_Reflection
-
- thumb_func_start GetGroundEffectFlags_TallGrassOnSpawn
-GetGroundEffectFlags_TallGrassOnSpawn: @ 8067CA8
- push {r4,lr}
- adds r4, r1, 0
- ldrb r0, [r0, 0x1E]
- bl MetatileBehavior_IsTallGrass_2
- lsls r0, 24
- cmp r0, 0
- beq _08067CC0
- ldr r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- str r0, [r4]
-_08067CC0:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_TallGrassOnSpawn
-
- thumb_func_start GetGroundEffectFlags_TallGrassOnBeginStep
-GetGroundEffectFlags_TallGrassOnBeginStep: @ 8067CC8
- push {r4,lr}
- adds r4, r1, 0
- ldrb r0, [r0, 0x1E]
- bl MetatileBehavior_IsTallGrass_2
- lsls r0, 24
- cmp r0, 0
- beq _08067CE0
- ldr r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- str r0, [r4]
-_08067CE0:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_TallGrassOnBeginStep
-
- thumb_func_start GetGroundEffectFlags_LongGrassOnSpawn
-GetGroundEffectFlags_LongGrassOnSpawn: @ 8067CE8
- push {r4,lr}
- adds r4, r1, 0
- ldrb r0, [r0, 0x1E]
- bl MetatileBehavior_IsLongGrass
- lsls r0, 24
- cmp r0, 0
- beq _08067D00
- ldr r0, [r4]
- movs r1, 0x4
- orrs r0, r1
- str r0, [r4]
-_08067D00:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_LongGrassOnSpawn
-
- thumb_func_start GetGroundEffectFlags_LongGrassOnBeginStep
-GetGroundEffectFlags_LongGrassOnBeginStep: @ 8067D08
- push {r4,lr}
- adds r4, r1, 0
- ldrb r0, [r0, 0x1E]
- bl MetatileBehavior_IsLongGrass
- lsls r0, 24
- cmp r0, 0
- beq _08067D20
- ldr r0, [r4]
- movs r1, 0x8
- orrs r0, r1
- str r0, [r4]
-_08067D20:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_LongGrassOnBeginStep
-
- thumb_func_start GetGroundEffectFlags_Tracks
-GetGroundEffectFlags_Tracks: @ 8067D28
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_ReturnFalse
- lsls r0, 24
- cmp r0, 0
- beq _08067D42
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 1
- b _08067D5E
-_08067D42:
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_IsMB21OrSand
- lsls r0, 24
- cmp r0, 0
- bne _08067D5A
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_ReturnFalse_5
- lsls r0, 24
- cmp r0, 0
- beq _08067D62
-_08067D5A:
- ldr r0, [r5]
- movs r1, 0x80
-_08067D5E:
- orrs r0, r1
- str r0, [r5]
-_08067D62:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_Tracks
-
- thumb_func_start GetGroundEffectFlags_SandHeap
-GetGroundEffectFlags_SandHeap: @ 8067D68
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_ReturnFalse
- lsls r0, 24
- cmp r0, 0
- beq _08067DA6
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_ReturnFalse
- lsls r0, 24
- cmp r0, 0
- beq _08067DA6
- ldrb r1, [r4, 0x2]
- lsls r0, r1, 27
- cmp r0, 0
- blt _08067DB0
- movs r0, 0x11
- negs r0, r0
- ands r0, r1
- movs r1, 0x10
- orrs r0, r1
- strb r0, [r4, 0x2]
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 4
- orrs r0, r1
- str r0, [r5]
- b _08067DB0
-_08067DA6:
- ldrb r1, [r4, 0x2]
- movs r0, 0x11
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x2]
-_08067DB0:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_SandHeap
-
- thumb_func_start GetGroundEffectFlags_ShallowFlowingWater
-GetGroundEffectFlags_ShallowFlowingWater: @ 8067DB8
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsWaterfallBottom
- lsls r0, 24
- cmp r0, 0
- beq _08067DD6
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_IsWaterfallBottom
- lsls r0, 24
- cmp r0, 0
- bne _08067DEE
-_08067DD6:
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_ReturnFalse_10
- lsls r0, 24
- cmp r0, 0
- beq _08067E0C
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_ReturnFalse_10
- lsls r0, 24
- cmp r0, 0
- beq _08067E0C
-_08067DEE:
- ldrb r1, [r4, 0x2]
- lsls r0, r1, 28
- cmp r0, 0
- blt _08067E16
- movs r0, 0x9
- negs r0, r0
- ands r0, r1
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r4, 0x2]
- ldr r0, [r5]
- movs r1, 0x40
- orrs r0, r1
- str r0, [r5]
- b _08067E16
-_08067E0C:
- ldrb r1, [r4, 0x2]
- movs r0, 0x9
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x2]
-_08067E16:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_ShallowFlowingWater
-
- thumb_func_start GetGroundEffectFlags_Puddle
-GetGroundEffectFlags_Puddle: @ 8067E1C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsPuddle
- lsls r0, 24
- cmp r0, 0
- beq _08067E44
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_IsPuddle
- lsls r0, 24
- cmp r0, 0
- beq _08067E44
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 3
- orrs r0, r1
- str r0, [r5]
-_08067E44:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_Puddle
-
- thumb_func_start GetGroundEffectFlags_Ripple
-GetGroundEffectFlags_Ripple: @ 8067E4C
- push {r4,lr}
- adds r4, r1, 0
- ldrb r0, [r0, 0x1E]
- bl MetatileBehavior_IsPondWaterOrPuddle
- lsls r0, 24
- cmp r0, 0
- beq _08067E66
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 2
- orrs r0, r1
- str r0, [r4]
-_08067E66:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_Ripple
-
- thumb_func_start GetGroundEffectFlags_ShortGrass
-GetGroundEffectFlags_ShortGrass: @ 8067E6C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_ReturnFalse_8
- lsls r0, 24
- cmp r0, 0
- beq _08067EAA
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_ReturnFalse_8
- lsls r0, 24
- cmp r0, 0
- beq _08067EAA
- ldrb r1, [r4, 0x2]
- lsls r0, r1, 29
- cmp r0, 0
- blt _08067EB4
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4, 0x2]
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 10
- orrs r0, r1
- str r0, [r5]
- b _08067EB4
-_08067EAA:
- ldrb r1, [r4, 0x2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x2]
-_08067EB4:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_ShortGrass
-
- thumb_func_start GetGroundEffectFlags_HotSprings
-GetGroundEffectFlags_HotSprings: @ 8067EBC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsHotSprings
- lsls r0, 24
- cmp r0, 0
- beq _08067EFA
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_IsHotSprings
- lsls r0, 24
- cmp r0, 0
- beq _08067EFA
- ldrb r1, [r4, 0x2]
- lsls r0, r1, 26
- cmp r0, 0
- blt _08067F04
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r4, 0x2]
- ldr r0, [r5]
- movs r1, 0x80
- lsls r1, 11
- orrs r0, r1
- str r0, [r5]
- b _08067F04
-_08067EFA:
- ldrb r1, [r4, 0x2]
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x2]
-_08067F04:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_HotSprings
-
- thumb_func_start GetGroundEffectFlags_Seaweed
-GetGroundEffectFlags_Seaweed: @ 8067F0C
- push {r4,lr}
- adds r4, r1, 0
- ldrb r0, [r0, 0x1E]
- bl MetatileBehavior_IsMB22
- lsls r0, 24
- cmp r0, 0
- beq _08067F26
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 12
- orrs r0, r1
- str r0, [r4]
-_08067F26:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_Seaweed
-
- thumb_func_start GetGroundEffectFlags_JumpLanding
-GetGroundEffectFlags_JumpLanding: @ 8067F2C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- adds r6, r1, 0
- ldr r0, [r7]
- ldr r1, _08067F68 @ =0x02000020
- ands r0, r1
- cmp r0, 0x20
- bne _08067F7E
- movs r5, 0
- ldr r0, _08067F6C @ =gUnknown_83A702C
- mov r8, r0
-_08067F46:
- lsls r4, r5, 2
- mov r0, r8
- adds r1, r4, r0
- ldrb r0, [r7, 0x1E]
- ldr r1, [r1]
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- beq _08067F74
- ldr r0, _08067F70 @ =gUnknown_83A7044
- adds r0, r4, r0
- ldr r1, [r6]
- ldr r0, [r0]
- orrs r1, r0
- str r1, [r6]
- b _08067F7E
- .align 2, 0
-_08067F68: .4byte 0x02000020
-_08067F6C: .4byte gUnknown_83A702C
-_08067F70: .4byte gUnknown_83A7044
-_08067F74:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _08067F46
-_08067F7E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end GetGroundEffectFlags_JumpLanding
-
- thumb_func_start sub_8067F88
-sub_8067F88: @ 8067F88
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r5, r0, 0
- ldrb r0, [r5, 0x5]
- bl GetObjectEventGraphicsInfo
- movs r4, 0
- movs r0, 0x1
- mov r10, r0
-_08067FA0:
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- ldrh r1, [r5, 0x12]
- add r1, r10
- lsls r4, 16
- asrs r6, r4, 16
- adds r1, r6, r1
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl GetReflectionTypeByMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- mov r9, r4
- cmp r0, 0
- bne _080680BA
- movs r3, 0x14
- ldrsh r0, [r5, r3]
- ldrh r1, [r5, 0x16]
- add r1, r10
- adds r1, r6, r1
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl GetReflectionTypeByMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080680BA
- movs r2, 0x1
- lsls r0, r2, 16
- asrs r1, r0, 16
- mov r8, r0
- cmp r2, r1
- bge _080680A8
- movs r0, 0x80
- lsls r0, 9
- asrs r7, r0, 16
-_08067FFC:
- ldrh r0, [r5, 0x10]
- lsls r1, r2, 16
- asrs r4, r1, 16
- adds r0, r4, r0
- lsls r0, 16
- asrs r0, 16
- ldrh r1, [r5, 0x12]
- adds r1, r7, r1
- adds r1, r6, r1
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl GetReflectionTypeByMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080680BA
- ldrh r0, [r5, 0x10]
- subs r0, r4
- lsls r0, 16
- asrs r0, 16
- ldrh r1, [r5, 0x12]
- adds r1, r7, r1
- adds r1, r6, r1
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl GetReflectionTypeByMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080680BA
- ldrh r0, [r5, 0x14]
- adds r0, r4, r0
- lsls r0, 16
- asrs r0, 16
- ldrh r1, [r5, 0x16]
- adds r1, r7, r1
- adds r1, r6, r1
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl GetReflectionTypeByMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080680BA
- ldrh r0, [r5, 0x14]
- subs r0, r4
- lsls r0, 16
- asrs r0, 16
- ldrh r1, [r5, 0x16]
- adds r1, r7, r1
- adds r1, r6, r1
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl GetReflectionTypeByMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080680BA
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- asrs r0, 16
- mov r3, r8
- asrs r1, r3, 16
- cmp r0, r1
- blt _08067FFC
-_080680A8:
- movs r0, 0x80
- lsls r0, 9
- add r0, r9
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- bge _080680B8
- b _08067FA0
-_080680B8:
- movs r0, 0
-_080680BA:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8067F88
-
- thumb_func_start GetReflectionTypeByMetatileBehavior
-GetReflectionTypeByMetatileBehavior: @ 80680C8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl MetatileBehavior_IsIce
- lsls r0, 24
- cmp r0, 0
- beq _080680DE
- movs r0, 0x1
- b _080680F0
-_080680DE:
- adds r0, r4, 0
- bl MetatileBehavior_IsReflective
- lsls r0, 24
- cmp r0, 0
- bne _080680EE
- movs r0, 0
- b _080680F0
-_080680EE:
- movs r0, 0x2
-_080680F0:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetReflectionTypeByMetatileBehavior
-
- thumb_func_start GetLedgeJumpDirection
-GetLedgeJumpDirection: @ 80680F8
- push {r4,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r4, r2, 24
- cmp r4, 0
- beq _0806813E
- cmp r4, 0x4
- bls _08068114
- subs r0, r4, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
-_08068114:
- subs r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r3, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08068144 @ =gUnknown_83A705C
- lsls r1, r4, 2
- adds r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08068148
-_0806813E:
- movs r0, 0
- b _0806814E
- .align 2, 0
-_08068144: .4byte gUnknown_83A705C
-_08068148:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r0, 24
-_0806814E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetLedgeJumpDirection
-
- thumb_func_start ObjectEventSetSpriteOamTableForLongGrass
-ObjectEventSetSpriteOamTableForLongGrass: @ 8068154
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- ldrb r0, [r5]
- lsls r0, 27
- cmp r0, 0
- blt _080681A8
- ldrb r0, [r5, 0x1E]
- bl MetatileBehavior_IsLongGrass
- lsls r0, 24
- cmp r0, 0
- beq _080681A8
- ldrb r0, [r5, 0x1F]
- bl MetatileBehavior_IsLongGrass
- lsls r0, 24
- cmp r0, 0
- beq _080681A8
- adds r4, 0x42
- ldrb r1, [r4]
- movs r6, 0x40
- negs r6, r6
- adds r0, r6, 0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4]
- ldrb r0, [r5, 0xB]
- lsrs r0, 4
- bl ZCoordToPriority
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080681A8
- ldrb r0, [r4]
- adds r1, r6, 0
- ands r1, r0
- movs r0, 0x5
- orrs r1, r0
- strb r1, [r4]
-_080681A8:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end ObjectEventSetSpriteOamTableForLongGrass
-
- thumb_func_start IsZCoordMismatchAt
-IsZCoordMismatchAt: @ 80681B0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- lsrs r0, r1, 16
- lsls r2, 16
- lsrs r1, r2, 16
- cmp r4, 0
- beq _080681DE
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetZCoordAt
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _080681DE
- cmp r0, 0xF
- beq _080681DE
- cmp r0, r4
- bne _080681E2
-_080681DE:
- movs r0, 0
- b _080681E4
-_080681E2:
- movs r0, 0x1
-_080681E4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end IsZCoordMismatchAt
-
- thumb_func_start ObjectEventUpdateZCoordAndPriority
-ObjectEventUpdateZCoordAndPriority: @ 80681EC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x3]
- lsls r0, 29
- cmp r0, 0
- blt _0806823A
- adds r0, r4, 0
- bl ObjectEventUpdateZCoord
- ldr r1, _08068240 @ =gUnknown_83A708C
- ldrb r2, [r4, 0xB]
- lsls r2, 24
- lsrs r0, r2, 28
- adds r0, r1
- ldrb r0, [r0]
- adds r4, r5, 0
- adds r4, 0x42
- movs r1, 0x3F
- ands r1, r0
- ldrb r3, [r4]
- movs r0, 0x40
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- ldr r0, _08068244 @ =gUnknown_83A707C
- lsrs r2, 28
- adds r2, r0
- movs r0, 0x3
- ldrb r1, [r2]
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
-_0806823A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08068240: .4byte gUnknown_83A708C
-_08068244: .4byte gUnknown_83A707C
- thumb_func_end ObjectEventUpdateZCoordAndPriority
-
- thumb_func_start InitObjectPriorityByZCoord
-InitObjectPriorityByZCoord: @ 8068248
- push {r4,lr}
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _0806828C @ =gUnknown_83A708C
- adds r2, r1, r2
- ldrb r2, [r2]
- movs r3, 0x42
- adds r3, r0
- mov r12, r3
- movs r3, 0x3F
- ands r3, r2
- mov r2, r12
- ldrb r4, [r2]
- movs r2, 0x40
- negs r2, r2
- ands r2, r4
- orrs r2, r3
- mov r3, r12
- strb r2, [r3]
- ldr r2, _08068290 @ =gUnknown_83A707C
- adds r1, r2
- movs r3, 0x3
- ldrb r2, [r1]
- ands r2, r3
- lsls r2, 2
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806828C: .4byte gUnknown_83A708C
-_08068290: .4byte gUnknown_83A707C
- thumb_func_end InitObjectPriorityByZCoord
-
- thumb_func_start ZCoordToPriority
-ZCoordToPriority: @ 8068294
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080682A0 @ =gUnknown_83A707C
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_080682A0: .4byte gUnknown_83A707C
- thumb_func_end ZCoordToPriority
-
- thumb_func_start ObjectEventUpdateZCoord
-ObjectEventUpdateZCoord: @ 80682A4
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- movs r2, 0x12
- ldrsh r1, [r4, r2]
- bl MapGridGetZCoordAt
- lsls r0, 24
- lsrs r5, r0, 24
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- movs r2, 0x16
- ldrsh r1, [r4, r2]
- bl MapGridGetZCoordAt
- lsls r0, 24
- lsrs r0, 24
- cmp r5, 0xF
- beq _080682F2
- cmp r0, 0xF
- beq _080682F2
- movs r3, 0xF
- adds r0, r5, 0
- ands r0, r3
- ldrb r1, [r4, 0xB]
- movs r2, 0x10
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r4, 0xB]
- cmp r5, 0
- beq _080682F2
- cmp r5, 0xF
- beq _080682F2
- lsls r0, r5, 4
- ands r2, r3
- orrs r2, r0
- strb r2, [r4, 0xB]
-_080682F2:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end ObjectEventUpdateZCoord
-
- thumb_func_start SetObjectSubpriorityByZCoord
-SetObjectSubpriorityByZCoord: @ 80682F8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 24
- lsrs r2, 24
- adds r3, r1, 0
- adds r3, 0x29
- movs r5, 0
- ldrsb r5, [r3, r5]
- ldrh r4, [r1, 0x22]
- ldr r3, _08068338 @ =gSpriteCoordOffsetY
- subs r4, r5
- ldrh r3, [r3]
- adds r4, r3
- adds r4, 0x8
- movs r3, 0xFF
- ands r4, r3
- lsrs r4, 4
- movs r3, 0x10
- subs r3, r4
- lsls r3, 17
- ldr r4, _0806833C @ =gUnknown_83A706C
- adds r0, r4
- lsrs r3, 16
- ldrb r0, [r0]
- adds r3, r0
- adds r2, r3
- adds r1, 0x43
- strb r2, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08068338: .4byte gSpriteCoordOffsetY
-_0806833C: .4byte gUnknown_83A706C
- thumb_func_end SetObjectSubpriorityByZCoord
-
- thumb_func_start ObjectEventUpdateSubpriority
-ObjectEventUpdateSubpriority: @ 8068340
- push {lr}
- adds r2, r0, 0
- ldrb r0, [r2, 0x3]
- lsls r0, 29
- cmp r0, 0
- blt _08068356
- ldrb r0, [r2, 0xB]
- lsrs r0, 4
- movs r2, 0x1
- bl SetObjectSubpriorityByZCoord
-_08068356:
- pop {r0}
- bx r0
- thumb_func_end ObjectEventUpdateSubpriority
-
- thumb_func_start AreZCoordsCompatible
-AreZCoordsCompatible: @ 806835C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- cmp r0, 0
- beq _08068372
- cmp r1, 0
- beq _08068372
- cmp r0, r1
- bne _08068376
-_08068372:
- movs r0, 0x1
- b _08068378
-_08068376:
- movs r0, 0
-_08068378:
- pop {r1}
- bx r1
- thumb_func_end AreZCoordsCompatible
-
- thumb_func_start GroundEffect_SpawnOnTallGrass
-GroundEffect_SpawnOnTallGrass: @ 806837C
- push {lr}
- ldr r3, _080683C0 @ =gFieldEffectArguments
- movs r2, 0x10
- ldrsh r1, [r0, r2]
- str r1, [r3]
- movs r2, 0x12
- ldrsh r1, [r0, r2]
- str r1, [r3, 0x4]
- ldrb r1, [r0, 0xB]
- lsrs r1, 4
- str r1, [r3, 0x8]
- movs r1, 0x2
- str r1, [r3, 0xC]
- ldrb r1, [r0, 0x8]
- lsls r1, 8
- ldrb r2, [r0, 0x9]
- orrs r1, r2
- str r1, [r3, 0x10]
- ldrb r0, [r0, 0xA]
- str r0, [r3, 0x14]
- ldr r0, _080683C4 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- ldrb r0, [r1, 0x5]
- lsls r0, 8
- ldrb r1, [r1, 0x4]
- orrs r0, r1
- str r0, [r3, 0x18]
- movs r0, 0x1
- str r0, [r3, 0x1C]
- movs r0, 0x4
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_080683C0: .4byte gFieldEffectArguments
-_080683C4: .4byte gSaveBlock1Ptr
- thumb_func_end GroundEffect_SpawnOnTallGrass
-
- thumb_func_start GroundEffect_StepOnTallGrass
-GroundEffect_StepOnTallGrass: @ 80683C8
- push {lr}
- ldr r3, _0806840C @ =gFieldEffectArguments
- movs r2, 0x10
- ldrsh r1, [r0, r2]
- str r1, [r3]
- movs r2, 0x12
- ldrsh r1, [r0, r2]
- str r1, [r3, 0x4]
- ldrb r1, [r0, 0xB]
- lsrs r1, 4
- str r1, [r3, 0x8]
- movs r1, 0x2
- str r1, [r3, 0xC]
- ldrb r1, [r0, 0x8]
- lsls r1, 8
- ldrb r2, [r0, 0x9]
- orrs r1, r2
- str r1, [r3, 0x10]
- ldrb r0, [r0, 0xA]
- str r0, [r3, 0x14]
- ldr r0, _08068410 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- ldrb r0, [r1, 0x5]
- lsls r0, 8
- ldrb r1, [r1, 0x4]
- orrs r0, r1
- str r0, [r3, 0x18]
- movs r0, 0
- str r0, [r3, 0x1C]
- movs r0, 0x4
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_0806840C: .4byte gFieldEffectArguments
-_08068410: .4byte gSaveBlock1Ptr
- thumb_func_end GroundEffect_StepOnTallGrass
-
- thumb_func_start GroundEffect_SpawnOnLongGrass
-GroundEffect_SpawnOnLongGrass: @ 8068414
- push {lr}
- ldr r3, _08068458 @ =gFieldEffectArguments
- movs r2, 0x10
- ldrsh r1, [r0, r2]
- str r1, [r3]
- movs r2, 0x12
- ldrsh r1, [r0, r2]
- str r1, [r3, 0x4]
- ldrb r1, [r0, 0xB]
- lsrs r1, 4
- str r1, [r3, 0x8]
- movs r1, 0x2
- str r1, [r3, 0xC]
- ldrb r1, [r0, 0x8]
- lsls r1, 8
- ldrb r2, [r0, 0x9]
- orrs r1, r2
- str r1, [r3, 0x10]
- ldrb r0, [r0, 0xA]
- str r0, [r3, 0x14]
- ldr r0, _0806845C @ =gSaveBlock1Ptr
- ldr r1, [r0]
- ldrb r0, [r1, 0x5]
- lsls r0, 8
- ldrb r1, [r1, 0x4]
- orrs r0, r1
- str r0, [r3, 0x18]
- movs r0, 0x1
- str r0, [r3, 0x1C]
- movs r0, 0x11
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_08068458: .4byte gFieldEffectArguments
-_0806845C: .4byte gSaveBlock1Ptr
- thumb_func_end GroundEffect_SpawnOnLongGrass
-
- thumb_func_start GroundEffect_StepOnLongGrass
-GroundEffect_StepOnLongGrass: @ 8068460
- push {lr}
- ldr r3, _080684A4 @ =gFieldEffectArguments
- movs r2, 0x10
- ldrsh r1, [r0, r2]
- str r1, [r3]
- movs r2, 0x12
- ldrsh r1, [r0, r2]
- str r1, [r3, 0x4]
- ldrb r1, [r0, 0xB]
- lsrs r1, 4
- str r1, [r3, 0x8]
- movs r1, 0x2
- str r1, [r3, 0xC]
- ldrb r1, [r0, 0x8]
- lsls r1, 8
- ldrb r2, [r0, 0x9]
- orrs r1, r2
- str r1, [r3, 0x10]
- ldrb r0, [r0, 0xA]
- str r0, [r3, 0x14]
- ldr r0, _080684A8 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- ldrb r0, [r1, 0x5]
- lsls r0, 8
- ldrb r1, [r1, 0x4]
- orrs r0, r1
- str r0, [r3, 0x18]
- movs r0, 0
- str r0, [r3, 0x1C]
- movs r0, 0x11
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_080684A4: .4byte gFieldEffectArguments
-_080684A8: .4byte gSaveBlock1Ptr
- thumb_func_end GroundEffect_StepOnLongGrass
-
- thumb_func_start GroundEffect_WaterReflection
-GroundEffect_WaterReflection: @ 80684AC
- push {lr}
- movs r2, 0
- bl SetUpReflection
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_WaterReflection
-
- thumb_func_start GroundEffect_IceReflection
-GroundEffect_IceReflection: @ 80684B8
- push {lr}
- movs r2, 0x1
- bl SetUpReflection
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_IceReflection
-
- thumb_func_start GroundEffect_FlowingWater
-GroundEffect_FlowingWater: @ 80684C4
- push {lr}
- adds r1, r0, 0
- movs r0, 0x22
- bl oe_exec_and_other_stuff
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_FlowingWater
-
- thumb_func_start GroundEffect_SandTracks
-GroundEffect_SandTracks: @ 80684D4
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x5]
- bl GetObjectEventGraphicsInfo
- ldr r1, _080684FC @ =gUnknown_83A709C
- ldrb r0, [r0, 0xD]
- lsls r0, 2
- adds r0, r1
- ldr r3, [r0]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0
- bl _call_via_r3
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080684FC: .4byte gUnknown_83A709C
- thumb_func_end GroundEffect_SandTracks
-
- thumb_func_start GroundEffect_DeepSandTracks
-GroundEffect_DeepSandTracks: @ 8068500
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x5]
- bl GetObjectEventGraphicsInfo
- ldr r1, _08068528 @ =gUnknown_83A709C
- ldrb r0, [r0, 0xD]
- lsls r0, 2
- adds r0, r1
- ldr r3, [r0]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x1
- bl _call_via_r3
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08068528: .4byte gUnknown_83A709C
- thumb_func_end GroundEffect_DeepSandTracks
-
- thumb_func_start nullsub_26
-nullsub_26: @ 806852C
- bx lr
- thumb_func_end nullsub_26
-
- thumb_func_start DoTracksGroundEffect_Footprints
-DoTracksGroundEffect_Footprints: @ 8068530
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r4, r2, 24
- lsrs r4, 24
- ldr r1, _08068578 @ =gUnknown_83A70A8
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- ldr r1, _0806857C @ =gFieldEffectArguments
- movs r2, 0x14
- ldrsh r0, [r5, r2]
- str r0, [r1]
- movs r2, 0x16
- ldrsh r0, [r5, r2]
- str r0, [r1, 0x4]
- movs r0, 0x95
- str r0, [r1, 0x8]
- movs r0, 0x2
- str r0, [r1, 0xC]
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- str r0, [r1, 0x10]
- lsls r4, 1
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- bl FieldEffectStart
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08068578: .4byte gUnknown_83A70A8
-_0806857C: .4byte gFieldEffectArguments
- thumb_func_end DoTracksGroundEffect_Footprints
-
- thumb_func_start DoTracksGroundEffect_BikeTireTracks
-DoTracksGroundEffect_BikeTireTracks: @ 8068580
- push {r4,lr}
- adds r4, r0, 0
- ldr r1, [r4, 0x10]
- ldr r0, [r4, 0x14]
- cmp r1, r0
- beq _080685C2
- ldr r2, _080685C8 @ =gFieldEffectArguments
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- str r0, [r2]
- movs r1, 0x16
- ldrsh r0, [r4, r1]
- str r0, [r2, 0x4]
- movs r0, 0x95
- str r0, [r2, 0x8]
- movs r0, 0x2
- str r0, [r2, 0xC]
- ldr r3, _080685CC @ =gUnknown_83A70AC
- ldrb r1, [r4, 0x18]
- lsls r1, 28
- lsrs r1, 28
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- lsls r0, 2
- subs r0, 0x5
- adds r1, r0
- adds r1, r3
- ldrb r0, [r1]
- str r0, [r2, 0x10]
- movs r0, 0x23
- bl FieldEffectStart
-_080685C2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080685C8: .4byte gFieldEffectArguments
-_080685CC: .4byte gUnknown_83A70AC
- thumb_func_end DoTracksGroundEffect_BikeTireTracks
-
- thumb_func_start GroundEffect_Ripple
-GroundEffect_Ripple: @ 80685D0
- push {lr}
- bl DoRippleFieldEffect
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_Ripple
-
- thumb_func_start GroundEffect_StepOnPuddle
-GroundEffect_StepOnPuddle: @ 80685DC
- push {lr}
- adds r1, r0, 0
- movs r0, 0xF
- bl oe_exec_and_other_stuff
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_StepOnPuddle
-
- thumb_func_start GroundEffect_SandHeap
-GroundEffect_SandHeap: @ 80685EC
- push {lr}
- adds r1, r0, 0
- movs r0, 0x27
- bl oe_exec_and_other_stuff
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_SandHeap
-
- thumb_func_start GroundEffect_JumpOnTallGrass
-GroundEffect_JumpOnTallGrass: @ 80685FC
- push {r4-r7,lr}
- sub sp, 0x4
- adds r5, r0, 0
- adds r6, r1, 0
- ldr r1, _08068650 @ =gFieldEffectArguments
- movs r2, 0x10
- ldrsh r0, [r5, r2]
- str r0, [r1]
- movs r4, 0x12
- ldrsh r0, [r5, r4]
- str r0, [r1, 0x4]
- ldrb r0, [r5, 0xB]
- lsrs r0, 4
- str r0, [r1, 0x8]
- movs r0, 0x2
- str r0, [r1, 0xC]
- movs r0, 0xC
- bl FieldEffectStart
- ldrb r0, [r5, 0x8]
- ldrb r1, [r5, 0x9]
- ldrb r2, [r5, 0xA]
- movs r7, 0x10
- ldrsh r3, [r5, r7]
- movs r7, 0x12
- ldrsh r4, [r5, r7]
- str r4, [sp]
- bl FindTallGrassFieldEffectSpriteId
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- bne _08068646
- adds r0, r5, 0
- adds r1, r6, 0
- bl GroundEffect_SpawnOnTallGrass
-_08068646:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08068650: .4byte gFieldEffectArguments
- thumb_func_end GroundEffect_JumpOnTallGrass
-
- thumb_func_start GroundEffect_JumpOnLongGrass
-GroundEffect_JumpOnLongGrass: @ 8068654
- push {lr}
- ldr r2, _08068678 @ =gFieldEffectArguments
- movs r3, 0x10
- ldrsh r1, [r0, r3]
- str r1, [r2]
- movs r3, 0x12
- ldrsh r1, [r0, r3]
- str r1, [r2, 0x4]
- ldrb r0, [r0, 0xB]
- lsrs r0, 4
- str r0, [r2, 0x8]
- movs r0, 0x2
- str r0, [r2, 0xC]
- movs r0, 0x12
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_08068678: .4byte gFieldEffectArguments
- thumb_func_end GroundEffect_JumpOnLongGrass
-
- thumb_func_start GroundEffect_JumpOnShallowWater
-GroundEffect_JumpOnShallowWater: @ 806867C
- push {r4,lr}
- ldr r3, _080686A8 @ =gFieldEffectArguments
- movs r4, 0x10
- ldrsh r2, [r0, r4]
- str r2, [r3]
- movs r4, 0x12
- ldrsh r2, [r0, r4]
- str r2, [r3, 0x4]
- ldrb r0, [r0, 0xB]
- lsrs r0, 4
- str r0, [r3, 0x8]
- ldrb r0, [r1, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r3, 0xC]
- movs r0, 0x10
- bl FieldEffectStart
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080686A8: .4byte gFieldEffectArguments
- thumb_func_end GroundEffect_JumpOnShallowWater
-
- thumb_func_start GroundEffect_JumpOnWater
-GroundEffect_JumpOnWater: @ 80686AC
- push {r4,lr}
- ldr r3, _080686D8 @ =gFieldEffectArguments
- movs r4, 0x10
- ldrsh r2, [r0, r4]
- str r2, [r3]
- movs r4, 0x12
- ldrsh r2, [r0, r4]
- str r2, [r3, 0x4]
- ldrb r0, [r0, 0xB]
- lsrs r0, 4
- str r0, [r3, 0x8]
- ldrb r0, [r1, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r3, 0xC]
- movs r0, 0xE
- bl FieldEffectStart
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080686D8: .4byte gFieldEffectArguments
- thumb_func_end GroundEffect_JumpOnWater
-
- thumb_func_start GroundEffect_JumpLandingDust
-GroundEffect_JumpLandingDust: @ 80686DC
- push {r4,lr}
- ldr r3, _08068708 @ =gFieldEffectArguments
- movs r4, 0x10
- ldrsh r2, [r0, r4]
- str r2, [r3]
- movs r4, 0x12
- ldrsh r2, [r0, r4]
- str r2, [r3, 0x4]
- ldrb r0, [r0, 0xB]
- lsrs r0, 4
- str r0, [r3, 0x8]
- ldrb r0, [r1, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r3, 0xC]
- movs r0, 0xA
- bl FieldEffectStart
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08068708: .4byte gFieldEffectArguments
- thumb_func_end GroundEffect_JumpLandingDust
-
- thumb_func_start GroundEffect_ShortGrass
-GroundEffect_ShortGrass: @ 806870C
- push {lr}
- adds r1, r0, 0
- movs r0, 0x29
- bl oe_exec_and_other_stuff
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_ShortGrass
-
- thumb_func_start GroundEffect_HotSprings
-GroundEffect_HotSprings: @ 806871C
- push {lr}
- adds r1, r0, 0
- movs r0, 0x2A
- bl oe_exec_and_other_stuff
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_HotSprings
-
- thumb_func_start GroundEffect_Seaweed
-GroundEffect_Seaweed: @ 806872C
- push {lr}
- ldr r2, _08068748 @ =gFieldEffectArguments
- movs r3, 0x10
- ldrsh r1, [r0, r3]
- str r1, [r2]
- movs r1, 0x12
- ldrsh r0, [r0, r1]
- str r0, [r2, 0x4]
- movs r0, 0x35
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_08068748: .4byte gFieldEffectArguments
- thumb_func_end GroundEffect_Seaweed
-
- thumb_func_start DoFlaggedGroundEffects
-DoFlaggedGroundEffects: @ 806874C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- adds r7, r1, 0
- adds r5, r2, 0
- ldrb r0, [r6, 0x8]
- cmp r0, 0x7F
- bne _08068766
- ldrb r0, [r6, 0x1]
- lsls r0, 26
- cmp r0, 0
- blt _0806878E
-_08068766:
- movs r4, 0
- ldr r0, _08068798 @ =gUnknown_83A70BC
- mov r8, r0
-_0806876C:
- movs r0, 0x1
- ands r0, r5
- cmp r0, 0
- beq _08068782
- lsls r0, r4, 2
- add r0, r8
- ldr r2, [r0]
- adds r0, r6, 0
- adds r1, r7, 0
- bl _call_via_r2
-_08068782:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- lsrs r5, 1
- cmp r4, 0x13
- bls _0806876C
-_0806878E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08068798: .4byte gUnknown_83A70BC
- thumb_func_end DoFlaggedGroundEffects
-
- thumb_func_start filters_out_some_ground_effects
-filters_out_some_ground_effects: @ 806879C
- push {lr}
- adds r2, r0, 0
- adds r3, r1, 0
- ldrb r0, [r2]
- lsls r0, 27
- cmp r0, 0
- bge _080687CA
- ldrb r1, [r2, 0x2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- movs r1, 0x11
- negs r1, r1
- ands r0, r1
- adds r1, 0x8
- ands r0, r1
- subs r1, 0x18
- ands r0, r1
- strb r0, [r2, 0x2]
- ldr r0, [r3]
- ldr r1, _080687D0 @ =0xfff9f7bd
- ands r0, r1
- str r0, [r3]
-_080687CA:
- pop {r0}
- bx r0
- .align 2, 0
-_080687D0: .4byte 0xfff9f7bd
- thumb_func_end filters_out_some_ground_effects
-
- thumb_func_start FilterOutStepOnPuddleGroundEffectIfJumping
-FilterOutStepOnPuddleGroundEffectIfJumping: @ 80687D4
- push {lr}
- adds r2, r1, 0
- ldrb r0, [r0]
- lsls r0, 26
- cmp r0, 0
- bge _080687E8
- ldr r0, [r2]
- ldr r1, _080687EC @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
-_080687E8:
- pop {r0}
- bx r0
- .align 2, 0
-_080687EC: .4byte 0xfffffbff
- thumb_func_end FilterOutStepOnPuddleGroundEffectIfJumping
-
- thumb_func_start DoGroundEffects_OnSpawn
-DoGroundEffects_OnSpawn: @ 80687F0
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4]
- lsls r0, 29
- cmp r0, 0
- bge _08068834
- movs r0, 0
- str r0, [sp]
- adds r0, r4, 0
- bl ObjectEventUpdateZCoordAndPriority
- adds r0, r4, 0
- mov r1, sp
- bl GetAllGroundEffectFlags_OnSpawn
- adds r0, r4, 0
- adds r1, r5, 0
- bl ObjectEventSetSpriteOamTableForLongGrass
- ldr r2, [sp]
- adds r0, r4, 0
- adds r1, r5, 0
- bl DoFlaggedGroundEffects
- ldrb r1, [r4]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- movs r1, 0x11
- negs r1, r1
- ands r0, r1
- strb r0, [r4]
-_08068834:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end DoGroundEffects_OnSpawn
-
- thumb_func_start DoGroundEffects_OnBeginStep
-DoGroundEffects_OnBeginStep: @ 806883C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4]
- lsls r0, 29
- cmp r0, 0
- bge _08068888
- movs r0, 0
- str r0, [sp]
- adds r0, r4, 0
- bl ObjectEventUpdateZCoordAndPriority
- adds r0, r4, 0
- mov r1, sp
- bl GetAllGroundEffectFlags_OnBeginStep
- adds r0, r4, 0
- adds r1, r5, 0
- bl ObjectEventSetSpriteOamTableForLongGrass
- adds r0, r4, 0
- mov r1, sp
- bl filters_out_some_ground_effects
- ldr r2, [sp]
- adds r0, r4, 0
- adds r1, r5, 0
- bl DoFlaggedGroundEffects
- ldrb r1, [r4]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- movs r1, 0x11
- negs r1, r1
- ands r0, r1
- strb r0, [r4]
-_08068888:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end DoGroundEffects_OnBeginStep
-
- thumb_func_start DoGroundEffects_OnFinishStep
-DoGroundEffects_OnFinishStep: @ 8068890
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4]
- lsls r0, 28
- cmp r0, 0
- bge _080688DC
- movs r0, 0
- str r0, [sp]
- adds r0, r4, 0
- bl ObjectEventUpdateZCoordAndPriority
- adds r0, r4, 0
- mov r1, sp
- bl GetAllGroundEffectFlags_OnFinishStep
- adds r0, r4, 0
- adds r1, r5, 0
- bl ObjectEventSetSpriteOamTableForLongGrass
- adds r0, r4, 0
- mov r1, sp
- bl FilterOutStepOnPuddleGroundEffectIfJumping
- ldr r2, [sp]
- adds r0, r4, 0
- adds r1, r5, 0
- bl DoFlaggedGroundEffects
- ldrb r1, [r4]
- movs r0, 0x9
- negs r0, r0
- ands r0, r1
- movs r1, 0x21
- negs r1, r1
- ands r0, r1
- strb r0, [r4]
-_080688DC:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end DoGroundEffects_OnFinishStep
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/event_object_movement.s b/data/event_object_movement.s
index 55a9ca5b3..259099795 100644
--- a/data/event_object_movement.s
+++ b/data/event_object_movement.s
@@ -9184,66 +9184,3 @@ sMovementActionFuncs_xA5:: @ 83A7018
.4byte MovementActionFunc_xA5_0
.4byte MovementActionFunc_xA5_1
.4byte MovementActionFunc_xA4_2
-
- .align 2
-gUnknown_83A7024:: @ 83A7024
- .4byte 0x00000020, 0x00000010
-
-gUnknown_83A702C:: @ 83A702C
- .4byte MetatileBehavior_IsTallGrass_2
- .4byte MetatileBehavior_IsLongGrass
- .4byte MetatileBehavior_IsPuddle
- .4byte MetatileBehavior_IsSurfable
- .4byte MetatileBehavior_IsWaterfallBottom
- .4byte MetatileBehavior_UnusedReturnTrue
-
-gUnknown_83A7044:: @ 83A7044
- .4byte 0x00001000, 0x00002000, 0x00004000, 0x00008000, 0x00004000, 0x00010000
-
-gUnknown_83A705C:: @ 83A705C
- .4byte MetatileBehavior_IsJumpSouth
- .4byte MetatileBehavior_IsJumpNorth
- .4byte MetatileBehavior_IsJumpWest
- .4byte MetatileBehavior_IsJumpEast
-
-gUnknown_83A706C:: @ 83A706C
- .byte 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73
-
-gUnknown_83A707C:: @ 83A707C
- .byte 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x02
-
-gUnknown_83A708C:: @ 83A708C
- .byte 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x01
-
-gUnknown_83A709C:: @ 83A709C
- .4byte nullsub_26
- .4byte DoTracksGroundEffect_Footprints
- .4byte DoTracksGroundEffect_BikeTireTracks
-
-gUnknown_83A70A8:: @ 83A70A8
- .byte 0x0d, 0x00, 0x18, 0x00
-
-gUnknown_83A70AC:: @ 83A70AC
- .byte 0x01, 0x02, 0x07, 0x08, 0x01, 0x02, 0x06, 0x05, 0x05, 0x08, 0x03, 0x04, 0x06, 0x07, 0x03, 0x04
-
-gUnknown_83A70BC:: @ 83A70BC
- .4byte GroundEffect_SpawnOnTallGrass
- .4byte GroundEffect_StepOnTallGrass
- .4byte GroundEffect_SpawnOnLongGrass
- .4byte GroundEffect_StepOnLongGrass
- .4byte GroundEffect_WaterReflection
- .4byte GroundEffect_IceReflection
- .4byte GroundEffect_FlowingWater
- .4byte GroundEffect_SandTracks
- .4byte GroundEffect_DeepSandTracks
- .4byte GroundEffect_Ripple
- .4byte GroundEffect_StepOnPuddle
- .4byte GroundEffect_SandHeap
- .4byte GroundEffect_JumpOnTallGrass
- .4byte GroundEffect_JumpOnLongGrass
- .4byte GroundEffect_JumpOnShallowWater
- .4byte GroundEffect_JumpOnWater
- .4byte GroundEffect_JumpLandingDust
- .4byte GroundEffect_ShortGrass
- .4byte GroundEffect_HotSprings
- .4byte GroundEffect_Seaweed
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index e8c0d4463..4ecfaa27a 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -25,6 +25,27 @@ struct UnkStruct_083A3698
u8 animPos[4];
};
+#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN (1 << 0)
+#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE (1 << 1)
+#define GROUND_EFFECT_FLAG_LONG_GRASS_ON_SPAWN (1 << 2)
+#define GROUND_EFFECT_FLAG_LONG_GRASS_ON_MOVE (1 << 3)
+#define GROUND_EFFECT_FLAG_ICE_REFLECTION (1 << 4)
+#define GROUND_EFFECT_FLAG_REFLECTION (1 << 5)
+#define GROUND_EFFECT_FLAG_SHALLOW_FLOWING_WATER (1 << 6)
+#define GROUND_EFFECT_FLAG_SAND (1 << 7)
+#define GROUND_EFFECT_FLAG_DEEP_SAND (1 << 8)
+#define GROUND_EFFECT_FLAG_RIPPLES (1 << 9)
+#define GROUND_EFFECT_FLAG_PUDDLE (1 << 10)
+#define GROUND_EFFECT_FLAG_SAND_PILE (1 << 11)
+#define GROUND_EFFECT_FLAG_LAND_IN_TALL_GRASS (1 << 12)
+#define GROUND_EFFECT_FLAG_LAND_IN_LONG_GRASS (1 << 13)
+#define GROUND_EFFECT_FLAG_LAND_IN_SHALLOW_WATER (1 << 14)
+#define GROUND_EFFECT_FLAG_LAND_IN_DEEP_WATER (1 << 15)
+#define GROUND_EFFECT_FLAG_LAND_ON_NORMAL_GROUND (1 << 16)
+#define GROUND_EFFECT_FLAG_SHORT_GRASS (1 << 17)
+#define GROUND_EFFECT_FLAG_HOT_SPRINGS (1 << 18)
+#define GROUND_EFFECT_FLAG_SEAWEED (1 << 19)
+
struct PairedPalettes
{
u16 tag;
@@ -140,8 +161,11 @@ 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);
+bool8 AreZCoordsCompatible(u8, u8);
u8 ZCoordToPriority(u8 z);
+void ObjectEventUpdateZCoord(struct ObjectEvent *pObject);
void SetObjectSubpriorityByZCoord(u8 z, struct Sprite * sprite, u8 offset);
+bool8 IsZCoordMismatchAt(u8, s16, s16);
void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables);
u8 AddCameraObject(u8 trackedSpriteId);
void UpdateObjectEventsForCameraUpdate(s16 x, s16 y);
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index e6e0538f6..9472f0b94 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -19,5 +19,8 @@ void sub_80DC478(u8, u8);
void StartAshFieldEffect(s16, s16, u16, s16);
void sub_80DCBB8(struct ObjectEvent *);
bool8 sub_80DCBE0(struct ObjectEvent *);
+void SetUpReflection(struct ObjectEvent*, struct Sprite*, u8);
+u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent*);
+u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
#endif //GUARD_FIELD_EFFECT_HELPERS_H
diff --git a/include/field_ground_effect.h b/include/field_ground_effect.h
deleted file mode 100644
index 1233dec69..000000000
--- a/include/field_ground_effect.h
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// Created by scott on 9/6/2017.
-//
-
-#ifndef GUARD_FIELD_GROUND_EFFECT_H
-#define GUARD_FIELD_GROUND_EFFECT_H
-
-#include "global.h"
-
-// Exported type declarations
-
-// Exported RAM declarations
-
-// Exported ROM declarations
-void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8);
-void InitObjectPriorityByZCoord(struct Sprite *, u8);
-bool8 IsZCoordMismatchAt(u8, s16, s16);
-bool8 AreZCoordsCompatible(u8, u8);
-void ObjectEventUpdateSubpriority(struct ObjectEvent *, struct Sprite *);
-void DoGroundEffects_OnSpawn(struct ObjectEvent *, struct Sprite *);
-void DoGroundEffects_OnBeginStep(struct ObjectEvent *, struct Sprite *);
-void DoGroundEffects_OnFinishStep(struct ObjectEvent *, struct Sprite *);
-
-#endif //GUARD_FIELD_GROUND_EFFECT_H
diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h
index be1dc57bc..af56ae2be 100644
--- a/include/metatile_behavior.h
+++ b/include/metatile_behavior.h
@@ -3,15 +3,15 @@
#include "global.h"
-bool8 MetatileBehavior_UnusedReturnTrue(u8 metatileBehavior);
+bool8 MetatileBehavior_IsATile(u8 metatileBehavior);
bool8 MetatileBehavior_IsJumpEast(u8 metatileBehavior);
bool8 MetatileBehavior_IsJumpWest(u8 metatileBehavior);
bool8 MetatileBehavior_IsJumpNorth(u8 metatileBehavior);
bool8 MetatileBehavior_IsJumpSouth(u8 metatileBehavior);
bool8 MetatileBehavior_IsPokeGrass(u8 metatileBehavior);
-bool8 MetatileBehavior_IsMB21OrSand(u8 metatileBehavior);
bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse(u8 metatileBehavior);
+bool8 MetatileBehavior_IsMB21OrWaterfallBottom(u8 metatileBehavior);
+bool8 MetatileBehavior_IsDeepSand(u8 metatileBehavior);
bool8 MetatileBehavior_IsReflective(u8 metatileBehavior);
bool8 MetatileBehavior_IsIce(u8 metatileBehavior);
bool8 MetatileBehavior_IsWarpDoor(u8 metatileBehavior);
@@ -50,12 +50,12 @@ bool8 MetatileBehavior_IsSlideEast(u8 metatileBehavior);
bool8 MetatileBehavior_IsCounter(u8 metatileBehavior);
bool8 MetatileBehavior_IsPlayerFacingTVScreen(u8 tile, u8 playerDirection);
bool8 MetatileBehavior_IsPC(u8 metatileBehavior);
-bool8 MetatileBehavior_IsPondWaterOrPuddle(u8 metatileBehavior);
+bool8 MetatileBehavior_HasRipples(u8 metatileBehavior);
bool8 MetatileBehavior_IsPuddle(u8 metatileBehavior);
bool8 MetatileBehavior_IsTallGrass_2(u8 metatileBehavior);
bool8 MetatileBehavior_IsLongGrass(u8 metatileBehavior);
bool8 MetatileBehavior_ReturnFalse_4(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_5(u8 metatileBehavior);
+bool8 MetatileBehavior_IsFootprints(u8 metatileBehavior);
bool8 MetatileBehavior_IsBridge(u8 metatileBehavior);
bool8 MetatileBehavior_GetBridgeType(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedIsMB_01(u8 metatileBehavior);
@@ -74,7 +74,7 @@ bool8 MetatileBehavior_IsEastBlocked(u8 metatileBehavior);
bool8 MetatileBehavior_IsWestBlocked(u8 metatileBehavior);
bool8 MetatileBehavior_IsNorthBlocked(u8 metatileBehavior);
bool8 MetatileBehavior_IsSouthBlocked(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_8(u8 metatileBehavior);
+bool8 MetatileBehavior_IsShortGrass(u8 metatileBehavior);
bool8 MetatileBehavior_IsHotSprings(u8 metatileBehavior);
bool8 MetatileBehavior_IsWaterfall(u8 metatileBehavior);
bool8 MetatileBehavior_ReturnFalse_9(u8 metatileBehavior);
@@ -82,7 +82,7 @@ bool8 MetatileBehavior_UnusedReturnFalse(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_2(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_3(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_4(u8 metatileBehavior);
-bool8 MetatileBehavior_ReturnFalse_10(u8 metatileBehavior);
+bool8 MetatileBehavior_IsPacifidlogLog(u8 metatileBehavior);
bool8 MetatileBehavior_ReturnFalse_11(u8 metatileBehavior);
bool8 MetatileBehavior_IsRegionMap(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_5(u8 metatileBehavior);
@@ -103,7 +103,7 @@ bool8 MetatileBehavior_ReturnFalse_15(u8 metatileBehavior);
bool8 MetatileBehavior_ReturnFalse_16(u8 metatileBehavior);
bool8 MetatileBehavior_ReturnFalse_17(u8 metatileBehavior);
bool8 MetatileBehavior_ReturnFalse_18(u8 metatileBehavior);
-bool8 MetatileBehavior_IsMB22(u8 metatileBehavior);
+bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior);
bool8 MetatileBehavior_IsMB0A(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_9(u8 metatileBehavior);
bool8 MetatileBehavior_IsBookshelf(u8 metatileBehavior);
diff --git a/ld_script.txt b/ld_script.txt
index bde78a522..79055c02b 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -94,7 +94,6 @@ SECTIONS {
src/field_door.o(.text);
asm/field_player_avatar.o(.text);
src/event_object_movement.o(.text);
- asm/event_object_movement.o(.text);
src/event_object_80688E4.o(.text); /* event_object_movement */
src/field_message_box.o(.text);
src/event_object_lock.o(.text);
@@ -427,6 +426,7 @@ SECTIONS {
src/field_door.o(.rodata);
data/field_player_avatar.o(.rodata);
data/event_object_movement.o(.rodata);
+ src/event_object_movement.o(.rodata);
src/event_object_80688E4.o(.rodata); /* event_object_movement */
src/scrcmd.o(.rodata);
src/coord_event_weather.o(.rodata);
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 82a73990b..ed9e7a552 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -461,7 +461,7 @@ u8 BattleSetup_GetTerrainId(void)
return BATTLE_TERRAIN_GRASS;
if (MetatileBehavior_IsLongGrass(tileBehavior))
return BATTLE_TERRAIN_LONG_GRASS;
- if (MetatileBehavior_IsSandOrDeepSand(tileBehavior))
+ if (MetatileBehavior_IsMB21OrWaterfallBottom(tileBehavior))
return BATTLE_TERRAIN_SAND;
switch (gMapHeader.mapType)
{
diff --git a/src/event_object_80688E4.c b/src/event_object_80688E4.c
index 746b10f38..0477a02d9 100644
--- a/src/event_object_80688E4.c
+++ b/src/event_object_80688E4.c
@@ -1,7 +1,6 @@
#include "global.h"
#include "event_object_movement.h"
#include "field_effect.h"
-#include "field_ground_effect.h"
// This is part of evobjmv.c (see assert statement in DoObjectUnionRoomWarpYDisplacement).
@@ -627,7 +626,7 @@ bool32 RfuUnionObjectIsWarping(u8 objectEventId)
#undef tZCoord
#undef tObjectEventId
-u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct ObjectEvent * objectEvent)
+u32 StartFieldEffectForObjectEvent(u8 fieldEffectId, struct ObjectEvent * objectEvent)
{
ObjectEventGetLocalIdAndMap(objectEvent, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
return FieldEffectStart(fieldEffectId);
@@ -638,7 +637,7 @@ void DoShadowFieldEffect(struct ObjectEvent *objectEvent)
if (!objectEvent->hasShadow)
{
objectEvent->hasShadow = TRUE;
- oe_exec_and_other_stuff(FLDEFF_SHADOW, objectEvent);
+ StartFieldEffectForObjectEvent(FLDEFF_SHADOW, objectEvent);
}
}
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index 7ec8dd8d1..ffd7008b2 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -6,7 +6,6 @@
#include "field_control_avatar.h"
#include "field_effect.h"
#include "field_effect_helpers.h"
-#include "field_ground_effect.h"
#include "field_player_avatar.h"
#include "fieldmap.h"
#include "metatile_behavior.h"
@@ -34,6 +33,32 @@ static bool8 IsMetatileDirectionallyImpassable(struct ObjectEvent *, s16, s16, u
static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *, s16, s16);
static void sub_8067A10(struct ObjectEvent *, struct Sprite *);
static void UpdateObjEventSpriteVisibility(struct ObjectEvent *, struct Sprite *);
+static void ObjectEventUpdateMetatileBehaviors(struct ObjectEvent*);
+static void GetGroundEffectFlags_Reflection(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_TallGrassOnSpawn(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_LongGrassOnSpawn(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_SandHeap(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_ShallowFlowingWater(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_ShortGrass(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_HotSprings(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_TallGrassOnBeginStep(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_LongGrassOnBeginStep(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_Tracks(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_Puddle(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_Ripple(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_Seaweed(struct ObjectEvent*, u32*);
+static void GetGroundEffectFlags_JumpLanding(struct ObjectEvent*, u32*);
+static u8 ObjectEventCheckForReflectiveSurface(struct ObjectEvent*);
+static u8 GetReflectionTypeByMetatileBehavior(u32);
+static void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z);
+static void ObjectEventUpdateSubpriority(struct ObjectEvent*, struct Sprite*);
+static void DoTracksGroundEffect_None(struct ObjectEvent*, struct Sprite*, u8);
+static void DoTracksGroundEffect_Footprints(struct ObjectEvent*, struct Sprite*, u8);
+static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent*, struct Sprite*, u8);
+/*static*/ void DoRippleFieldEffect(struct ObjectEvent*, struct Sprite*);
+static void DoGroundEffects_OnSpawn(struct ObjectEvent*, struct Sprite*);
+static void DoGroundEffects_OnBeginStep(struct ObjectEvent*, struct Sprite*);
+static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*);
static void CreateReflectionEffectSprites(void);
static u8 GetObjectEventIdByLocalId(u8);
static u8 GetObjectEventIdByLocalIdAndMapInternal(u8, u8, u8);
@@ -64,7 +89,6 @@ static u8 sub_805E238(struct ObjectEventTemplate *, u8, s16, s16);
static u8 sub_805E27C(struct ObjectEventTemplate *, s16, s16);
static u8 sub_805E2E8(struct ObjectEventTemplate *, s16, s16);
static void sub_805E384(struct ObjectEventTemplate *);
-/*static*/ void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z);
static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *);
static bool8 MovementType_Hidden_Callback(struct ObjectEvent *, struct Sprite *);
static u8 sub_8063304(struct ObjectEvent *, struct Sprite *);
@@ -7433,4 +7457,916 @@ static void UpdateObjEventSpriteVisibility(struct ObjectEvent *objectEvent, stru
{
sprite->invisible = TRUE;
}
-} \ No newline at end of file
+}
+
+/*static*/ void GetAllGroundEffectFlags_OnSpawn(struct ObjectEvent *objEvent, u32 *flags)
+{
+ ObjectEventUpdateMetatileBehaviors(objEvent);
+ GetGroundEffectFlags_Reflection(objEvent, flags);
+ GetGroundEffectFlags_TallGrassOnSpawn(objEvent, flags);
+ GetGroundEffectFlags_LongGrassOnSpawn(objEvent, flags);
+ GetGroundEffectFlags_SandHeap(objEvent, flags);
+ GetGroundEffectFlags_ShallowFlowingWater(objEvent, flags);
+ GetGroundEffectFlags_ShortGrass(objEvent, flags);
+ GetGroundEffectFlags_HotSprings(objEvent, flags);
+}
+
+/*static*/ void GetAllGroundEffectFlags_OnBeginStep(struct ObjectEvent *objEvent, u32 *flags)
+{
+ ObjectEventUpdateMetatileBehaviors(objEvent);
+ GetGroundEffectFlags_Reflection(objEvent, flags);
+ GetGroundEffectFlags_TallGrassOnBeginStep(objEvent, flags);
+ GetGroundEffectFlags_LongGrassOnBeginStep(objEvent, flags);
+ GetGroundEffectFlags_Tracks(objEvent, flags);
+ GetGroundEffectFlags_SandHeap(objEvent, flags);
+ GetGroundEffectFlags_ShallowFlowingWater(objEvent, flags);
+ GetGroundEffectFlags_Puddle(objEvent, flags);
+ GetGroundEffectFlags_ShortGrass(objEvent, flags);
+ GetGroundEffectFlags_HotSprings(objEvent, flags);
+}
+
+/*static*/ void GetAllGroundEffectFlags_OnFinishStep(struct ObjectEvent *objEvent, u32 *flags)
+{
+ ObjectEventUpdateMetatileBehaviors(objEvent);
+ GetGroundEffectFlags_ShallowFlowingWater(objEvent, flags);
+ GetGroundEffectFlags_SandHeap(objEvent, flags);
+ GetGroundEffectFlags_Puddle(objEvent, flags);
+ GetGroundEffectFlags_Ripple(objEvent, flags);
+ GetGroundEffectFlags_ShortGrass(objEvent, flags);
+ GetGroundEffectFlags_HotSprings(objEvent, flags);
+ GetGroundEffectFlags_Seaweed(objEvent, flags);
+ GetGroundEffectFlags_JumpLanding(objEvent, flags);
+}
+
+static void ObjectEventUpdateMetatileBehaviors(struct ObjectEvent *objEvent)
+{
+ objEvent->previousMetatileBehavior = MapGridGetMetatileBehaviorAt(objEvent->previousCoords.x, objEvent->previousCoords.y);
+ objEvent->currentMetatileBehavior = MapGridGetMetatileBehaviorAt(objEvent->currentCoords.x, objEvent->currentCoords.y);
+}
+
+static void GetGroundEffectFlags_Reflection(struct ObjectEvent *objEvent, u32 *flags)
+{
+ u32 reflectionFlags[2] = { GROUND_EFFECT_FLAG_REFLECTION, GROUND_EFFECT_FLAG_ICE_REFLECTION };
+ u8 type = ObjectEventCheckForReflectiveSurface(objEvent);
+
+ if (type)
+ {
+ if (!objEvent->hasReflection)
+ {
+ objEvent->hasReflection = 0;
+ objEvent->hasReflection = 1;
+ *flags |= reflectionFlags[type - 1];
+ }
+ }
+ else
+ {
+ objEvent->hasReflection = 0;
+ }
+}
+
+static void GetGroundEffectFlags_TallGrassOnSpawn(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (MetatileBehavior_IsTallGrass_2(objEvent->currentMetatileBehavior))
+ *flags |= GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN;
+}
+
+static void GetGroundEffectFlags_TallGrassOnBeginStep(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (MetatileBehavior_IsTallGrass_2(objEvent->currentMetatileBehavior))
+ *flags |= GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE;
+}
+
+static void GetGroundEffectFlags_LongGrassOnSpawn(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (MetatileBehavior_IsLongGrass(objEvent->currentMetatileBehavior))
+ *flags |= GROUND_EFFECT_FLAG_LONG_GRASS_ON_SPAWN;
+}
+
+static void GetGroundEffectFlags_LongGrassOnBeginStep(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (MetatileBehavior_IsLongGrass(objEvent->currentMetatileBehavior))
+ *flags |= GROUND_EFFECT_FLAG_LONG_GRASS_ON_MOVE;
+}
+
+static void GetGroundEffectFlags_Tracks(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (MetatileBehavior_IsDeepSand(objEvent->previousMetatileBehavior))
+ {
+ *flags |= GROUND_EFFECT_FLAG_DEEP_SAND;
+ }
+ else if (MetatileBehavior_IsSandOrDeepSand(objEvent->previousMetatileBehavior)
+ || MetatileBehavior_IsFootprints(objEvent->previousMetatileBehavior))
+ {
+ *flags |= GROUND_EFFECT_FLAG_SAND;
+ }
+}
+
+static void GetGroundEffectFlags_SandHeap(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (MetatileBehavior_IsDeepSand(objEvent->currentMetatileBehavior)
+ && MetatileBehavior_IsDeepSand(objEvent->previousMetatileBehavior))
+ {
+ if (!objEvent->inSandPile)
+ {
+ objEvent->inSandPile = 0;
+ objEvent->inSandPile = 1;
+ *flags |= GROUND_EFFECT_FLAG_SAND_PILE;
+ }
+ }
+ else
+ {
+ objEvent->inSandPile = 0;
+ }
+}
+
+static void GetGroundEffectFlags_ShallowFlowingWater(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if ((MetatileBehavior_IsWaterfallBottom(objEvent->currentMetatileBehavior)
+ && MetatileBehavior_IsWaterfallBottom(objEvent->previousMetatileBehavior))
+ || (MetatileBehavior_IsPacifidlogLog(objEvent->currentMetatileBehavior)
+ && MetatileBehavior_IsPacifidlogLog(objEvent->previousMetatileBehavior)))
+ {
+ if (!objEvent->inShallowFlowingWater)
+ {
+ objEvent->inShallowFlowingWater = 0;
+ objEvent->inShallowFlowingWater = 1;
+ *flags |= GROUND_EFFECT_FLAG_SHALLOW_FLOWING_WATER;
+ }
+ }
+ else
+ {
+ objEvent->inShallowFlowingWater = 0;
+ }
+}
+
+static void GetGroundEffectFlags_Puddle(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (MetatileBehavior_IsPuddle(objEvent->currentMetatileBehavior)
+ && MetatileBehavior_IsPuddle(objEvent->previousMetatileBehavior))
+ {
+ *flags |= GROUND_EFFECT_FLAG_PUDDLE;
+ }
+}
+
+static void GetGroundEffectFlags_Ripple(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (MetatileBehavior_HasRipples(objEvent->currentMetatileBehavior))
+ *flags |= GROUND_EFFECT_FLAG_RIPPLES;
+}
+
+static void GetGroundEffectFlags_ShortGrass(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (MetatileBehavior_IsShortGrass(objEvent->currentMetatileBehavior)
+ && MetatileBehavior_IsShortGrass(objEvent->previousMetatileBehavior))
+ {
+ if (!objEvent->inShortGrass)
+ {
+ objEvent->inShortGrass = 0;
+ objEvent->inShortGrass = 1;
+ *flags |= GROUND_EFFECT_FLAG_SHORT_GRASS;
+ }
+ }
+ else
+ {
+ objEvent->inShortGrass = 0;
+ }
+}
+
+static void GetGroundEffectFlags_HotSprings(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (MetatileBehavior_IsHotSprings(objEvent->currentMetatileBehavior)
+ && MetatileBehavior_IsHotSprings(objEvent->previousMetatileBehavior))
+ {
+ if (!objEvent->inHotSprings)
+ {
+ objEvent->inHotSprings = 0;
+ objEvent->inHotSprings = 1;
+ *flags |= GROUND_EFFECT_FLAG_HOT_SPRINGS;
+ }
+ }
+ else
+ {
+ objEvent->inHotSprings = 0;
+ }
+}
+
+static void GetGroundEffectFlags_Seaweed(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (MetatileBehavior_IsSeaweed(objEvent->currentMetatileBehavior))
+ *flags |= GROUND_EFFECT_FLAG_SEAWEED;
+}
+
+static void GetGroundEffectFlags_JumpLanding(struct ObjectEvent *objEvent, u32 *flags)
+{
+ typedef bool8 (*MetatileFunc)(u8);
+
+ static const MetatileFunc metatileFuncs[] = {
+ MetatileBehavior_IsTallGrass_2,
+ MetatileBehavior_IsLongGrass,
+ MetatileBehavior_IsPuddle,
+ MetatileBehavior_IsSurfable,
+ MetatileBehavior_IsWaterfallBottom,
+ MetatileBehavior_IsATile,
+ };
+
+ static const u32 jumpLandingFlags[] = {
+ GROUND_EFFECT_FLAG_LAND_IN_TALL_GRASS,
+ GROUND_EFFECT_FLAG_LAND_IN_LONG_GRASS,
+ GROUND_EFFECT_FLAG_LAND_IN_SHALLOW_WATER,
+ GROUND_EFFECT_FLAG_LAND_IN_DEEP_WATER,
+ GROUND_EFFECT_FLAG_LAND_IN_SHALLOW_WATER,
+ GROUND_EFFECT_FLAG_LAND_ON_NORMAL_GROUND,
+ };
+
+ if (objEvent->landingJump && !objEvent->disableJumpLandingGroundEffect)
+ {
+ u8 i;
+
+ for (i = 0; i < ARRAY_COUNT(metatileFuncs); i++)
+ {
+ if (metatileFuncs[i](objEvent->currentMetatileBehavior))
+ {
+ *flags |= jumpLandingFlags[i];
+ return;
+ }
+ }
+ }
+}
+
+#ifdef NONMATCHING
+static u8 ObjectEventCheckForReflectiveSurface(struct ObjectEvent *objEvent)
+{
+ const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
+
+ // ceil div by tile width?
+ s16 width;
+ s16 height;
+ s16 i;
+ s16 j;
+ u8 result;
+ u8 b;
+
+#define RETURN_REFLECTION_TYPE_AT(x, y) \
+ b = MapGridGetMetatileBehaviorAt(x, y); \
+ result = GetReflectionTypeByMetatileBehavior(b); \
+ if (result != 0) \
+ return result;
+
+ for (i = 0, height = 1; i < height && height < 2;)
+ {
+ RETURN_REFLECTION_TYPE_AT(objEvent->currentCoords.x, (u16) (objEvent->currentCoords.y + 1 + i))
+ RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x, (u16) (objEvent->previousCoords.y + 1 + i))
+ for (j = 1; j < width && width < 2; j++)
+ {
+ RETURN_REFLECTION_TYPE_AT(objEvent->currentCoords.x + j, objEvent->currentCoords.y + 1 + i)
+ RETURN_REFLECTION_TYPE_AT(objEvent->currentCoords.x - j, objEvent->currentCoords.y + 1 + i)
+ RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x + j, objEvent->previousCoords.y + 1 + i)
+ RETURN_REFLECTION_TYPE_AT(objEvent->previousCoords.x - j, objEvent->previousCoords.y + 1 + i)
+ }
+ }
+ return 0;
+
+#undef RETURN_REFLECTION_TYPE_AT
+}
+#else
+NAKED
+static u8 ObjectEventCheckForReflectiveSurface(struct ObjectEvent *objEvent)
+{
+ asm_unified("\n\
+ push {r4-r7,lr} \n\
+ mov r7, r10 \n\
+ mov r6, r9 \n\
+ mov r5, r8 \n\
+ push {r5-r7} \n\
+ adds r5, r0, 0 \n\
+ ldrb r0, [r5, 0x5] \n\
+ bl GetObjectEventGraphicsInfo \n\
+ movs r4, 0 \n\
+ movs r0, 0x1 \n\
+ mov r10, r0 \n\
+ _08067FA0: \n\
+ movs r1, 0x10 \n\
+ ldrsh r0, [r5, r1] \n\
+ ldrh r1, [r5, 0x12] \n\
+ add r1, r10 \n\
+ lsls r4, 16 \n\
+ asrs r6, r4, 16 \n\
+ adds r1, r6, r1 \n\
+ lsls r1, 16 \n\
+ asrs r1, 16 \n\
+ bl MapGridGetMetatileBehaviorAt \n\
+ lsls r0, 24 \n\
+ lsrs r0, 24 \n\
+ bl GetReflectionTypeByMetatileBehavior \n\
+ lsls r0, 24 \n\
+ lsrs r0, 24 \n\
+ mov r9, r4 \n\
+ cmp r0, 0 \n\
+ bne _080680BA \n\
+ movs r3, 0x14 \n\
+ ldrsh r0, [r5, r3] \n\
+ ldrh r1, [r5, 0x16] \n\
+ add r1, r10 \n\
+ adds r1, r6, r1 \n\
+ lsls r1, 16 \n\
+ asrs r1, 16 \n\
+ bl MapGridGetMetatileBehaviorAt \n\
+ lsls r0, 24 \n\
+ lsrs r0, 24 \n\
+ bl GetReflectionTypeByMetatileBehavior \n\
+ lsls r0, 24 \n\
+ lsrs r0, 24 \n\
+ cmp r0, 0 \n\
+ bne _080680BA \n\
+ movs r2, 0x1 \n\
+ lsls r0, r2, 16 \n\
+ asrs r1, r0, 16 \n\
+ mov r8, r0 \n\
+ cmp r2, r1 \n\
+ bge _080680A8 \n\
+ movs r0, 0x80 \n\
+ lsls r0, 9 \n\
+ asrs r7, r0, 16 \n\
+ _08067FFC: \n\
+ ldrh r0, [r5, 0x10] \n\
+ lsls r1, r2, 16 \n\
+ asrs r4, r1, 16 \n\
+ adds r0, r4, r0 \n\
+ lsls r0, 16 \n\
+ asrs r0, 16 \n\
+ ldrh r1, [r5, 0x12] \n\
+ adds r1, r7, r1 \n\
+ adds r1, r6, r1 \n\
+ lsls r1, 16 \n\
+ asrs r1, 16 \n\
+ bl MapGridGetMetatileBehaviorAt \n\
+ lsls r0, 24 \n\
+ lsrs r0, 24 \n\
+ bl GetReflectionTypeByMetatileBehavior \n\
+ lsls r0, 24 \n\
+ lsrs r0, 24 \n\
+ cmp r0, 0 \n\
+ bne _080680BA \n\
+ ldrh r0, [r5, 0x10] \n\
+ subs r0, r4 \n\
+ lsls r0, 16 \n\
+ asrs r0, 16 \n\
+ ldrh r1, [r5, 0x12] \n\
+ adds r1, r7, r1 \n\
+ adds r1, r6, r1 \n\
+ lsls r1, 16 \n\
+ asrs r1, 16 \n\
+ bl MapGridGetMetatileBehaviorAt \n\
+ lsls r0, 24 \n\
+ lsrs r0, 24 \n\
+ bl GetReflectionTypeByMetatileBehavior \n\
+ lsls r0, 24 \n\
+ lsrs r0, 24 \n\
+ cmp r0, 0 \n\
+ bne _080680BA \n\
+ ldrh r0, [r5, 0x14] \n\
+ adds r0, r4, r0 \n\
+ lsls r0, 16 \n\
+ asrs r0, 16 \n\
+ ldrh r1, [r5, 0x16] \n\
+ adds r1, r7, r1 \n\
+ adds r1, r6, r1 \n\
+ lsls r1, 16 \n\
+ asrs r1, 16 \n\
+ bl MapGridGetMetatileBehaviorAt \n\
+ lsls r0, 24 \n\
+ lsrs r0, 24 \n\
+ bl GetReflectionTypeByMetatileBehavior \n\
+ lsls r0, 24 \n\
+ lsrs r0, 24 \n\
+ cmp r0, 0 \n\
+ bne _080680BA \n\
+ ldrh r0, [r5, 0x14] \n\
+ subs r0, r4 \n\
+ lsls r0, 16 \n\
+ asrs r0, 16 \n\
+ ldrh r1, [r5, 0x16] \n\
+ adds r1, r7, r1 \n\
+ adds r1, r6, r1 \n\
+ lsls r1, 16 \n\
+ asrs r1, 16 \n\
+ bl MapGridGetMetatileBehaviorAt \n\
+ lsls r0, 24 \n\
+ lsrs r0, 24 \n\
+ bl GetReflectionTypeByMetatileBehavior \n\
+ lsls r0, 24 \n\
+ lsrs r0, 24 \n\
+ cmp r0, 0 \n\
+ bne _080680BA \n\
+ adds r0, r4, 0x1 \n\
+ lsls r0, 16 \n\
+ lsrs r2, r0, 16 \n\
+ asrs r0, 16 \n\
+ mov r3, r8 \n\
+ asrs r1, r3, 16 \n\
+ cmp r0, r1 \n\
+ blt _08067FFC \n\
+ _080680A8: \n\
+ movs r0, 0x80 \n\
+ lsls r0, 9 \n\
+ add r0, r9 \n\
+ lsrs r4, r0, 16 \n\
+ asrs r0, 16 \n\
+ cmp r0, 0x2 \n\
+ bge _080680B8 \n\
+ b _08067FA0 \n\
+ _080680B8: \n\
+ movs r0, 0 \n\
+ _080680BA: \n\
+ pop {r3-r5} \n\
+ mov r8, r3 \n\
+ mov r9, r4 \n\
+ mov r10, r5 \n\
+ pop {r4-r7} \n\
+ pop {r1} \n\
+ bx r1 \n\
+ ");
+}
+#endif
+
+static u8 GetReflectionTypeByMetatileBehavior(u32 behavior)
+{
+ if (MetatileBehavior_IsIce(behavior))
+ return 1;
+ else if (MetatileBehavior_IsReflective(behavior))
+ return 2;
+ else
+ return 0;
+}
+
+u8 GetLedgeJumpDirection(s16 x, s16 y, u8 z)
+{
+ static bool8 (*const gUnknown_83A705C[])(u8) = {
+ MetatileBehavior_IsJumpSouth,
+ MetatileBehavior_IsJumpNorth,
+ MetatileBehavior_IsJumpWest,
+ MetatileBehavior_IsJumpEast,
+ };
+
+ u8 b;
+ u8 index = z;
+
+ if (index == 0)
+ return 0;
+ else if (index > 4)
+ index -= 4;
+
+ index--;
+ b = MapGridGetMetatileBehaviorAt(x, y);
+
+ if (gUnknown_83A705C[index](b) == 1)
+ return index + 1;
+
+ return 0;
+}
+
+/*static*/ void SetObjectEventSpriteOamTableForLongGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ if (objEvent->disableCoveringGroundEffects)
+ return;
+
+ if (!MetatileBehavior_IsLongGrass(objEvent->currentMetatileBehavior))
+ return;
+
+ if (!MetatileBehavior_IsLongGrass(objEvent->previousMetatileBehavior))
+ return;
+
+ sprite->subspriteTableNum = 4;
+
+ if (ZCoordToPriority(objEvent->previousElevation) == 1)
+ sprite->subspriteTableNum = 5;
+}
+
+bool8 IsZCoordMismatchAt(u8 z, s16 x, s16 y)
+{
+ u8 mapZ;
+
+ if (z == 0)
+ return FALSE;
+
+ mapZ = MapGridGetZCoordAt(x, y);
+
+ if (mapZ == 0 || mapZ == 0xF)
+ return FALSE;
+
+ if (mapZ != z)
+ return TRUE;
+
+ return FALSE;
+}
+
+static const u8 sUnknown_083A706C[] = {
+ 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73
+};
+
+// Each byte corresponds to a sprite priority for an object event.
+// This is directly the inverse of sObjectEventPriorities_083A708C.
+static const u8 sObjectEventPriorities_083A707C[] = {
+ 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 0, 2
+};
+
+// Each byte corresponds to a sprite priority for an object event.
+// This is the inverse of sObjectEventPriorities_083A707C.
+// 1 = Above player sprite
+// 2 = Below player sprite
+static const u8 sObjectEventPriorities_083A708C[] = {
+ 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1,
+};
+
+void UpdateObjectEventZCoordAndPriority(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ if (objEvent->fixedPriority)
+ return;
+
+ ObjectEventUpdateZCoord(objEvent);
+
+ sprite->subspriteTableNum = sObjectEventPriorities_083A708C[objEvent->previousElevation];
+ sprite->oam.priority = sObjectEventPriorities_083A707C[objEvent->previousElevation];
+}
+
+static void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z)
+{
+ sprite->subspriteTableNum = sObjectEventPriorities_083A708C[z];
+ sprite->oam.priority = sObjectEventPriorities_083A707C[z];
+}
+
+u8 ZCoordToPriority(u8 z)
+{
+ return sObjectEventPriorities_083A707C[z];
+}
+
+void ObjectEventUpdateZCoord(struct ObjectEvent *objEvent)
+{
+ u8 z = MapGridGetZCoordAt(objEvent->currentCoords.x, objEvent->currentCoords.y);
+ u8 z2 = MapGridGetZCoordAt(objEvent->previousCoords.x, objEvent->previousCoords.y);
+
+ if (z == 0xF || z2 == 0xF)
+ return;
+
+ objEvent->currentElevation = z;
+
+ if (z != 0 && z != 0xF)
+ objEvent->previousElevation = z;
+}
+
+void SetObjectSubpriorityByZCoord(u8 a, struct Sprite *sprite, u8 b)
+{
+ s32 tmp = sprite->centerToCornerVecY;
+ u32 tmpa = *(u16 *)&sprite->pos1.y;
+ u32 tmpb = *(u16 *)&gSpriteCoordOffsetY;
+ s32 tmp2 = (tmpa - tmp) + tmpb;
+ u16 tmp3 = (0x10 - ((((u32)tmp2 + 8) & 0xFF) >> 4)) * 2;
+ sprite->subpriority = tmp3 + sUnknown_083A706C[a] + b;
+}
+
+static void ObjectEventUpdateSubpriority(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ if (objEvent->fixedPriority)
+ return;
+
+ SetObjectSubpriorityByZCoord(objEvent->previousElevation, sprite, 1);
+}
+
+bool8 AreZCoordsCompatible(u8 a, u8 b)
+{
+ if (a == 0 || b == 0)
+ return TRUE;
+
+ if (a != b)
+ return FALSE;
+
+ return TRUE;
+}
+
+void GroundEffect_SpawnOnTallGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = objEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objEvent->currentCoords.y;
+ gFieldEffectArguments[2] = objEvent->previousElevation;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] = objEvent->localId << 8 | objEvent->mapNum;
+ gFieldEffectArguments[5] = objEvent->mapGroup;
+ gFieldEffectArguments[6] = (u8)gSaveBlock1Ptr->location.mapNum << 8 | (u8)gSaveBlock1Ptr->location.mapGroup;
+ gFieldEffectArguments[7] = 1;
+ FieldEffectStart(FLDEFF_TALL_GRASS);
+}
+
+void GroundEffect_StepOnTallGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = objEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objEvent->currentCoords.y;
+ gFieldEffectArguments[2] = objEvent->previousElevation;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] = objEvent->localId << 8 | objEvent->mapNum;
+ gFieldEffectArguments[5] = objEvent->mapGroup;
+ gFieldEffectArguments[6] = (u8)gSaveBlock1Ptr->location.mapNum << 8 | (u8)gSaveBlock1Ptr->location.mapGroup;
+ gFieldEffectArguments[7] = 0;
+ FieldEffectStart(FLDEFF_TALL_GRASS);
+}
+
+void GroundEffect_SpawnOnLongGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = objEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objEvent->currentCoords.y;
+ gFieldEffectArguments[2] = objEvent->previousElevation;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] = objEvent->localId << 8 | objEvent->mapNum;
+ gFieldEffectArguments[5] = objEvent->mapGroup;
+ gFieldEffectArguments[6] = (u8)gSaveBlock1Ptr->location.mapNum << 8 | (u8)gSaveBlock1Ptr->location.mapGroup;
+ gFieldEffectArguments[7] = 1;
+ FieldEffectStart(FLDEFF_LONG_GRASS);
+}
+
+void GroundEffect_StepOnLongGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = objEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objEvent->currentCoords.y;
+ gFieldEffectArguments[2] = objEvent->previousElevation;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] = (objEvent->localId << 8) | objEvent->mapNum;
+ gFieldEffectArguments[5] = objEvent->mapGroup;
+ gFieldEffectArguments[6] = (u8)gSaveBlock1Ptr->location.mapNum << 8 | (u8)gSaveBlock1Ptr->location.mapGroup;
+ gFieldEffectArguments[7] = 0;
+ FieldEffectStart(FLDEFF_LONG_GRASS);
+}
+
+void GroundEffect_WaterReflection(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ SetUpReflection(objEvent, sprite, 0);
+}
+
+void GroundEffect_IceReflection(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ SetUpReflection(objEvent, sprite, 1);
+}
+
+void GroundEffect_FlowingWater(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ StartFieldEffectForObjectEvent(FLDEFF_FEET_IN_FLOWING_WATER, objEvent);
+}
+
+static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) = {
+ DoTracksGroundEffect_None,
+ DoTracksGroundEffect_Footprints,
+ DoTracksGroundEffect_BikeTireTracks,
+};
+
+void GroundEffect_SandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
+ sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, 0);
+}
+
+void GroundEffect_DeepSandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
+ sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, 1);
+}
+
+static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a)
+{
+}
+
+static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a)
+{
+ // First half-word is a Field Effect script id. (gFieldEffectScriptPointers)
+ u16 sandFootprints_FieldEffectData[2] = {
+ FLDEFF_SAND_FOOTPRINTS,
+ FLDEFF_DEEP_SAND_FOOTPRINTS
+ };
+
+ gFieldEffectArguments[0] = objEvent->previousCoords.x;
+ gFieldEffectArguments[1] = objEvent->previousCoords.y;
+ gFieldEffectArguments[2] = 149;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] = objEvent->facingDirection;
+ FieldEffectStart(sandFootprints_FieldEffectData[a]);
+}
+
+static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a)
+{
+ // Specifies which bike track shape to show next.
+ // For example, when the bike turns from up to right, it will show
+ // a track that curves to the right.
+ // Each 4-byte row corresponds to the initial direction of the bike, and
+ // each byte in that row is for the next direction of the bike in the order
+ // of down, up, left, right.
+ static const u8 bikeTireTracks_Transitions[4][4] = {
+ 1, 2, 7, 8,
+ 1, 2, 6, 5,
+ 5, 8, 3, 4,
+ 6, 7, 3, 4,
+ };
+
+ if (objEvent->currentCoords.x != objEvent->previousCoords.x || objEvent->currentCoords.y != objEvent->previousCoords.y)
+ {
+ gFieldEffectArguments[0] = objEvent->previousCoords.x;
+ gFieldEffectArguments[1] = objEvent->previousCoords.y;
+ gFieldEffectArguments[2] = 149;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] =
+ bikeTireTracks_Transitions[objEvent->previousMovementDirection][objEvent->facingDirection - 5];
+ FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS);
+ }
+}
+
+void GroundEffect_Ripple(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ DoRippleFieldEffect(objEvent, sprite);
+}
+
+void GroundEffect_StepOnPuddle(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ StartFieldEffectForObjectEvent(FLDEFF_SPLASH, objEvent);
+}
+
+void GroundEffect_SandHeap(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ StartFieldEffectForObjectEvent(FLDEFF_SAND_PILE, objEvent);
+}
+
+void GroundEffect_JumpOnTallGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ u8 spriteId;
+
+ gFieldEffectArguments[0] = objEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objEvent->currentCoords.y;
+ gFieldEffectArguments[2] = objEvent->previousElevation;
+ gFieldEffectArguments[3] = 2;
+ FieldEffectStart(FLDEFF_JUMP_TALL_GRASS);
+
+ spriteId = FindTallGrassFieldEffectSpriteId(
+ objEvent->localId,
+ objEvent->mapNum,
+ objEvent->mapGroup,
+ objEvent->currentCoords.x,
+ objEvent->currentCoords.y);
+
+ if (spriteId == MAX_SPRITES)
+ GroundEffect_SpawnOnTallGrass(objEvent, sprite);
+}
+
+void GroundEffect_JumpOnLongGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = objEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objEvent->currentCoords.y;
+ gFieldEffectArguments[2] = objEvent->previousElevation;
+ gFieldEffectArguments[3] = 2;
+ FieldEffectStart(FLDEFF_JUMP_LONG_GRASS);
+}
+
+void GroundEffect_JumpOnShallowWater(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = objEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objEvent->currentCoords.y;
+ gFieldEffectArguments[2] = objEvent->previousElevation;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ FieldEffectStart(FLDEFF_JUMP_SMALL_SPLASH);
+}
+
+void GroundEffect_JumpOnWater(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = objEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objEvent->currentCoords.y;
+ gFieldEffectArguments[2] = objEvent->previousElevation;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ FieldEffectStart(FLDEFF_JUMP_BIG_SPLASH);
+}
+
+void GroundEffect_JumpLandingDust(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = objEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objEvent->currentCoords.y;
+ gFieldEffectArguments[2] = objEvent->previousElevation;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ FieldEffectStart(FLDEFF_DUST);
+}
+
+void GroundEffect_ShortGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ StartFieldEffectForObjectEvent(FLDEFF_SHORT_GRASS, objEvent);
+}
+
+void GroundEffect_HotSprings(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ StartFieldEffectForObjectEvent(FLDEFF_HOT_SPRINGS_WATER, objEvent);
+}
+
+void GroundEffect_Seaweed(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = objEvent->currentCoords.x;
+ gFieldEffectArguments[1] = objEvent->currentCoords.y;
+ FieldEffectStart(FLDEFF_BUBBLES);
+}
+
+static void (*const sGroundEffectFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite) = {
+ GroundEffect_SpawnOnTallGrass,
+ GroundEffect_StepOnTallGrass,
+ GroundEffect_SpawnOnLongGrass,
+ GroundEffect_StepOnLongGrass,
+ GroundEffect_WaterReflection,
+ GroundEffect_IceReflection,
+ GroundEffect_FlowingWater,
+ GroundEffect_SandTracks,
+ GroundEffect_DeepSandTracks,
+ GroundEffect_Ripple,
+ GroundEffect_StepOnPuddle,
+ GroundEffect_SandHeap,
+ GroundEffect_JumpOnTallGrass,
+ GroundEffect_JumpOnLongGrass,
+ GroundEffect_JumpOnShallowWater,
+ GroundEffect_JumpOnWater,
+ GroundEffect_JumpLandingDust,
+ GroundEffect_ShortGrass,
+ GroundEffect_HotSprings,
+ GroundEffect_Seaweed
+};
+
+/*static*/ void DoFlaggedGroundEffects(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 flags)
+{
+ u8 i;
+
+ if (objEvent->localId == OBJ_EVENT_ID_CAMERA && objEvent->invisible)
+ return;
+
+ for (i = 0; i < ARRAY_COUNT(sGroundEffectFuncs); i++, flags >>= 1)
+ if (flags & 1)
+ sGroundEffectFuncs[i](objEvent, sprite);
+}
+
+void filters_out_some_ground_effects(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (objEvent->disableCoveringGroundEffects)
+ {
+ objEvent->inShortGrass = 0;
+ objEvent->inSandPile = 0;
+ objEvent->inShallowFlowingWater = 0;
+ objEvent->inHotSprings = 0;
+ *flags &= ~(GROUND_EFFECT_FLAG_HOT_SPRINGS
+ | GROUND_EFFECT_FLAG_SHORT_GRASS
+ | GROUND_EFFECT_FLAG_SAND_PILE
+ | GROUND_EFFECT_FLAG_SHALLOW_FLOWING_WATER
+ | GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE);
+ }
+}
+
+void FilterOutStepOnPuddleGroundEffectIfJumping(struct ObjectEvent *objEvent, u32 *flags)
+{
+ if (objEvent->landingJump)
+ *flags &= ~GROUND_EFFECT_FLAG_PUDDLE;
+}
+
+static void DoGroundEffects_OnSpawn(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ u32 flags;
+
+ if (objEvent->triggerGroundEffectsOnMove)
+ {
+ flags = 0;
+ UpdateObjectEventZCoordAndPriority(objEvent, sprite);
+ GetAllGroundEffectFlags_OnSpawn(objEvent, &flags);
+ SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite);
+ DoFlaggedGroundEffects(objEvent, sprite, flags);
+ objEvent->triggerGroundEffectsOnMove = 0;
+ objEvent->disableCoveringGroundEffects = 0;
+ }
+}
+
+static void DoGroundEffects_OnBeginStep(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ u32 flags;
+
+ if (objEvent->triggerGroundEffectsOnMove)
+ {
+ flags = 0;
+ UpdateObjectEventZCoordAndPriority(objEvent, sprite);
+ GetAllGroundEffectFlags_OnBeginStep(objEvent, &flags);
+ SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite);
+ filters_out_some_ground_effects(objEvent, &flags);
+ DoFlaggedGroundEffects(objEvent, sprite, flags);
+ objEvent->triggerGroundEffectsOnMove = 0;
+ objEvent->disableCoveringGroundEffects = 0;
+ }
+}
+
+static void DoGroundEffects_OnFinishStep(struct ObjectEvent *objEvent, struct Sprite *sprite)
+{
+ u32 flags;
+
+ if (objEvent->triggerGroundEffectsOnStop)
+ {
+ flags = 0;
+ UpdateObjectEventZCoordAndPriority(objEvent, sprite);
+ GetAllGroundEffectFlags_OnFinishStep(objEvent, &flags);
+ SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite);
+ FilterOutStepOnPuddleGroundEffectIfJumping(objEvent, &flags);
+ DoFlaggedGroundEffects(objEvent, sprite, flags);
+ objEvent->triggerGroundEffectsOnStop = 0;
+ objEvent->landingJump = 0;
+ }
+}
diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c
index 507bcf2b4..30f3a29cb 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -24,7 +24,7 @@ static const u8 sTileBitAttributes[32] = {
[4] = 0x08,
};
-bool8 MetatileBehavior_UnusedReturnTrue(u8 metatileBehavior)
+bool8 MetatileBehavior_IsATile(u8 metatileBehavior)
{
return TRUE;
}
@@ -69,7 +69,7 @@ bool8 MetatileBehavior_IsPokeGrass(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsMB21OrSand(u8 metatileBehavior)
+bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior)
{
if(metatileBehavior == MB_21 || metatileBehavior == MB_SAND)
return TRUE;
@@ -77,7 +77,7 @@ bool8 MetatileBehavior_IsMB21OrSand(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior)
+bool8 MetatileBehavior_IsMB21OrWaterfallBottom(u8 metatileBehavior)
{
if(metatileBehavior == MB_21 || metatileBehavior == MB_WATERFALL_BOTTOM)
return TRUE;
@@ -85,7 +85,7 @@ bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_ReturnFalse(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsDeepSand(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_IsReflective(u8 metatileBehavior)
{
@@ -412,7 +412,7 @@ bool8 MetatileBehavior_IsPC(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsPondWaterOrPuddle(u8 metatileBehavior)
+bool8 MetatileBehavior_HasRipples(u8 metatileBehavior)
{
if(metatileBehavior == MB_POND_WATER || metatileBehavior == MB_PUDDLE)
return TRUE;
@@ -438,7 +438,7 @@ bool8 MetatileBehavior_IsTallGrass_2(u8 metatileBehavior)
bool8 MetatileBehavior_IsLongGrass(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_ReturnFalse_4(u8 metatileBehavior) { return FALSE; }
-bool8 MetatileBehavior_ReturnFalse_5(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsFootprints(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_IsBridge(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_GetBridgeType(u8 metatileBehavior) { return FALSE; }
@@ -580,7 +580,7 @@ bool8 MetatileBehavior_IsSouthBlocked(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_ReturnFalse_8(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsShortGrass(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_IsHotSprings(u8 metatileBehavior)
{
@@ -603,7 +603,7 @@ bool8 MetatileBehavior_UnusedReturnFalse(u8 metatileBehavior){ return FALSE; }
bool8 MetatileBehavior_UnusedReturnFalse_2(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_UnusedReturnFalse_3(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_UnusedReturnFalse_4(u8 metatileBehavior) { return FALSE; }
-bool8 MetatileBehavior_ReturnFalse_10(u8 metatileBehavior) { return FALSE; }
+bool8 MetatileBehavior_IsPacifidlogLog(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_ReturnFalse_11(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_IsRegionMap(u8 metatileBehavior)
@@ -683,7 +683,7 @@ bool8 MetatileBehavior_ReturnFalse_16(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_ReturnFalse_17(u8 metatileBehavior) { return FALSE; }
bool8 MetatileBehavior_ReturnFalse_18(u8 metatileBehavior) { return FALSE; }
-bool8 MetatileBehavior_IsMB22(u8 metatileBehavior)
+bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior)
{
if(metatileBehavior == MB_22)
return TRUE;
diff --git a/src/trainer_see.c b/src/trainer_see.c
index 3dbfbdf38..6fad80468 100644
--- a/src/trainer_see.c
+++ b/src/trainer_see.c
@@ -14,42 +14,42 @@
typedef u8 (*TrainerApproachFunc)(struct ObjectEvent *, s16, s16, s16);
typedef bool8 (*TrainerSeeFunc)(u8, struct Task *, struct ObjectEvent *);
-/*static*/ bool8 CheckTrainer(u8 trainerObjId);
-/*static*/ u8 GetTrainerApproachDistance(struct ObjectEvent * trainerObj);
-/*static*/ u8 GetTrainerApproachDistanceSouth(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
-/*static*/ u8 GetTrainerApproachDistanceNorth(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
-/*static*/ u8 GetTrainerApproachDistanceWest(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
-/*static*/ u8 GetTrainerApproachDistanceEast(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
-/*static*/ u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent * trainerObj, u8 approachDistance, u8 facingDirection);
-/*static*/ void TrainerApproachPlayer(struct ObjectEvent * trainerObj, u8 approachDistance);
-/*static*/ void Task_RunTrainerSeeFuncList(u8 taskId);
-/*static*/ bool8 TrainerSeeFunc_Dummy(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_StartExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_WaitExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_TrainerApproach(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_PrepareToEngage(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_End(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_BeginRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_WaitRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_TrainerInAshFacesPlayer(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_BeginJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_WaitJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_EndJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_OffscreenAboveTrainerCreateCameraObj(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveUp(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveDown(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
-/*static*/ void Task_DestroyTrainerApproachTask(u8 taskId);
-/*static*/ void SpriteCB_TrainerIcons(struct Sprite * sprite);
-/*static*/ void SetIconSpriteData(struct Sprite *sprite, u16 fldEffId, u8 spriteAnimNum);
-
-/*static*/ const u16 sGfx_Emoticons[] = INCBIN_U16("graphics/object_events/emoticons.4bpp");
+static bool8 CheckTrainer(u8 trainerObjId);
+static u8 GetTrainerApproachDistance(struct ObjectEvent * trainerObj);
+static u8 GetTrainerApproachDistanceSouth(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
+static u8 GetTrainerApproachDistanceNorth(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
+static u8 GetTrainerApproachDistanceWest(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
+static u8 GetTrainerApproachDistanceEast(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y);
+static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent * trainerObj, u8 approachDistance, u8 facingDirection);
+static void TrainerApproachPlayer(struct ObjectEvent * trainerObj, u8 approachDistance);
+static void Task_RunTrainerSeeFuncList(u8 taskId);
+static bool8 TrainerSeeFunc_Dummy(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_StartExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_WaitExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_TrainerApproach(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_PrepareToEngage(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_End(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_BeginRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_WaitRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_TrainerInAshFacesPlayer(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_BeginJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_WaitJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_EndJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_OffscreenAboveTrainerCreateCameraObj(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveUp(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveDown(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj);
+static void Task_DestroyTrainerApproachTask(u8 taskId);
+static void SpriteCB_TrainerIcons(struct Sprite * sprite);
+static void SetIconSpriteData(struct Sprite *sprite, u16 fldEffId, u8 spriteAnimNum);
+
+static const u16 sGfx_Emoticons[] = INCBIN_U16("graphics/object_events/emoticons.4bpp");
// u8 func(struct ObjectEvent * trainerObj, s16 range, s16 x, s16 y)
// range is the maximum distance the trainer can see
// x and y are the player's coordinates
// Returns distance to walk if trainer has unobstructed view of player
// Returns 0 if trainer can't see player
-/*static*/ const TrainerApproachFunc sDirectionalApproachDistanceFuncs[] = {
+static const TrainerApproachFunc sDirectionalApproachDistanceFuncs[] = {
GetTrainerApproachDistanceSouth,
GetTrainerApproachDistanceNorth,
GetTrainerApproachDistanceWest,
@@ -59,7 +59,7 @@ typedef bool8 (*TrainerSeeFunc)(u8, struct Task *, struct ObjectEvent *);
// bool8 func(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
// Returns TRUE to run the next func immediately
// Returns FALSE to delay the next func to the next frame
-/*static*/ const TrainerSeeFunc sTrainerSeeFuncList[] = {
+static const TrainerSeeFunc sTrainerSeeFuncList[] = {
TrainerSeeFunc_Dummy,
TrainerSeeFunc_StartExclMark,
TrainerSeeFunc_WaitExclMark,
@@ -77,7 +77,7 @@ typedef bool8 (*TrainerSeeFunc)(u8, struct Task *, struct ObjectEvent *);
TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveDown
};
-/*static*/ const TrainerSeeFunc sTrainerSeeFuncList2[] = {
+static const TrainerSeeFunc sTrainerSeeFuncList2[] = {
TrainerSeeFunc_TrainerInAshFacesPlayer,
TrainerSeeFunc_BeginJumpOutOfAsh,
TrainerSeeFunc_WaitJumpOutOfAsh,
@@ -104,7 +104,7 @@ bool8 CheckForTrainersWantingBattle(void)
return FALSE;
}
-/*static*/ bool8 CheckTrainer(u8 trainerObjId)
+static bool8 CheckTrainer(u8 trainerObjId)
{
const u8 *script = GetObjectEventScriptPointerByObjectEventId(trainerObjId);
u8 approachDistance;
@@ -122,7 +122,7 @@ bool8 CheckForTrainersWantingBattle(void)
return FALSE;
}
-/*static*/ u8 GetTrainerApproachDistance(struct ObjectEvent *trainerObj)
+static u8 GetTrainerApproachDistance(struct ObjectEvent *trainerObj)
{
s16 x, y;
u8 i;
@@ -148,7 +148,7 @@ bool8 CheckForTrainersWantingBattle(void)
}
// Returns how far south the player is from trainer. 0 if out of trainer's sight.
-/*static*/ u8 GetTrainerApproachDistanceSouth(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
+static u8 GetTrainerApproachDistanceSouth(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
{
if (trainerObj->currentCoords.x == x
&& y > trainerObj->currentCoords.y
@@ -163,7 +163,7 @@ bool8 CheckForTrainersWantingBattle(void)
}
// Returns how far north the player is from trainer. 0 if out of trainer's sight.
-/*static*/ u8 GetTrainerApproachDistanceNorth(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
+static u8 GetTrainerApproachDistanceNorth(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
{
if (trainerObj->currentCoords.x == x
&& y < trainerObj->currentCoords.y
@@ -174,7 +174,7 @@ bool8 CheckForTrainersWantingBattle(void)
}
// Returns how far west the player is from trainer. 0 if out of trainer's sight.
-/*static*/ u8 GetTrainerApproachDistanceWest(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
+static u8 GetTrainerApproachDistanceWest(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
{
if (trainerObj->currentCoords.y == y
&& x < trainerObj->currentCoords.x
@@ -185,7 +185,7 @@ bool8 CheckForTrainersWantingBattle(void)
}
// Returns how far east the player is from trainer. 0 if out of trainer's sight.
-/*static*/ u8 GetTrainerApproachDistanceEast(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
+static u8 GetTrainerApproachDistanceEast(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y)
{
if (trainerObj->currentCoords.y == y
&& x > trainerObj->currentCoords.x
@@ -197,7 +197,7 @@ bool8 CheckForTrainersWantingBattle(void)
#define COLLISION_MASK (~1)
-/*static*/ u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 approachDistance, u8 direction)
+static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 approachDistance, u8 direction)
{
s16 x, y;
u8 unk19_temp;
@@ -245,7 +245,7 @@ bool8 CheckForTrainersWantingBattle(void)
(dest) = (struct ObjectEvent *)(((task)->tTrainerObjHi << 16) | ((u16)(task)->tTrainerObjLo)); \
} while (0)
-/*static*/ void TrainerApproachPlayer(struct ObjectEvent * trainerObj, u8 approachDistance)
+static void TrainerApproachPlayer(struct ObjectEvent * trainerObj, u8 approachDistance)
{
u8 taskId = CreateTask(Task_RunTrainerSeeFuncList, 80);
struct Task * task = &gTasks[taskId];
@@ -254,7 +254,7 @@ bool8 CheckForTrainersWantingBattle(void)
task->tTrainerRange = approachDistance;
}
-/*static*/ void StartTrainerApproachWithFollowupTask(TaskFunc taskFunc)
+static void StartTrainerApproachWithFollowupTask(TaskFunc taskFunc)
{
u8 taskId = FindTaskIdByFunc(Task_RunTrainerSeeFuncList);
SetTaskFuncWithFollowupFunc(taskId, Task_RunTrainerSeeFuncList, taskFunc);
@@ -262,7 +262,7 @@ bool8 CheckForTrainersWantingBattle(void)
Task_RunTrainerSeeFuncList(taskId);
}
-/*static*/ void Task_RunTrainerSeeFuncList(u8 taskId)
+static void Task_RunTrainerSeeFuncList(u8 taskId)
{
struct Task * task = &gTasks[taskId];
struct ObjectEvent * trainerObj;
@@ -281,12 +281,12 @@ bool8 CheckForTrainersWantingBattle(void)
// TrainerSeeFuncs
-/*static*/ bool8 TrainerSeeFunc_Dummy(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
+static bool8 TrainerSeeFunc_Dummy(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
{
return FALSE;
}
-/*static*/ bool8 TrainerSeeFunc_StartExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
+static bool8 TrainerSeeFunc_StartExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
{
u8 action;
// FRLG introduces trainers who can see the player from offscreen above.
@@ -306,7 +306,7 @@ bool8 CheckForTrainersWantingBattle(void)
return TRUE;
}
-/*static*/ bool8 TrainerSeeFunc_WaitExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
+static bool8 TrainerSeeFunc_WaitExclMark(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
{
if (FieldEffectActiveListContains(FLDEFF_EXCLAMATION_MARK_ICON))
{
@@ -315,15 +315,15 @@ bool8 CheckForTrainersWantingBattle(void)
else
{
task->tFuncId++;
- if (trainerObj->movementType == MOVEMENT_TYPE_TREE_DISGUISE || trainerObj->movementType == MOVEMENT_TYPE_MOUNTAIN_DISGUISE)
+ if (trainerObj->movementType == MOVEMENT_TYPE_TREE_DISGUISE || trainerObj->movementType == MOVEMENT_TYPE_MOUNTAIN_DISGUISE)
task->tFuncId = 6;
- if (trainerObj->movementType == MOVEMENT_TYPE_HIDDEN)
+ if (trainerObj->movementType == MOVEMENT_TYPE_HIDDEN)
task->tFuncId = 8;
return TRUE;
}
}
-/*static*/ bool8 TrainerSeeFunc_TrainerApproach(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
+static bool8 TrainerSeeFunc_TrainerApproach(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
{
if (!ObjectEventIsMovementOverridden(trainerObj) || ObjectEventClearHeldMovementIfFinished(trainerObj))
{
@@ -341,7 +341,7 @@ bool8 CheckForTrainersWantingBattle(void)
return FALSE;
}
-/*static*/ bool8 TrainerSeeFunc_PrepareToEngage(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
+static bool8 TrainerSeeFunc_PrepareToEngage(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
{
struct ObjectEvent *playerObj;
@@ -363,7 +363,7 @@ bool8 CheckForTrainersWantingBattle(void)
return FALSE;
}
-/*static*/ bool8 TrainerSeeFunc_End(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
+static bool8 TrainerSeeFunc_End(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
{
struct ObjectEvent *playerObj = &gObjectEvents[gPlayerAvatar.objectEventId];
@@ -374,7 +374,7 @@ bool8 CheckForTrainersWantingBattle(void)
}
// Jumps here if disguised. Not used in FRLG.
-/*static*/ bool8 TrainerSeeFunc_BeginRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
+static bool8 TrainerSeeFunc_BeginRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
{
if (!ObjectEventIsMovementOverridden(trainerObj)
|| ObjectEventClearHeldMovementIfFinished(trainerObj))
@@ -385,7 +385,7 @@ bool8 CheckForTrainersWantingBattle(void)
return FALSE;
}
-/*static*/ bool8 TrainerSeeFunc_WaitRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
+static bool8 TrainerSeeFunc_WaitRemoveDisguise(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
{
if (ObjectEventClearHeldMovementIfFinished(trainerObj))
task->tFuncId = 3;
@@ -394,7 +394,7 @@ bool8 CheckForTrainersWantingBattle(void)
}
// Jump here if hidden in ash. Not used in FRLG.
-/*static*/ bool8 TrainerSeeFunc_TrainerInAshFacesPlayer(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
+static bool8 TrainerSeeFunc_TrainerInAshFacesPlayer(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
{
if (!ObjectEventIsMovementOverridden(trainerObj)
|| ObjectEventClearHeldMovementIfFinished(trainerObj))
@@ -405,7 +405,7 @@ bool8 CheckForTrainersWantingBattle(void)
return FALSE;
}
-/*static*/ bool8 TrainerSeeFunc_BeginJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
+static bool8 TrainerSeeFunc_BeginJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
{
if (ObjectEventCheckHeldMovementStatus(trainerObj))
{
@@ -419,7 +419,7 @@ bool8 CheckForTrainersWantingBattle(void)
return FALSE;
}
-/*static*/ bool8 TrainerSeeFunc_WaitJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
+static bool8 TrainerSeeFunc_WaitJumpOutOfAsh(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
{
struct Sprite *sprite;
@@ -438,7 +438,7 @@ bool8 CheckForTrainersWantingBattle(void)
return FALSE;
}
-/*static*/ bool8 TrainerSeeFunc_EndJumpOutOfAsh(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
+static bool8 TrainerSeeFunc_EndJumpOutOfAsh(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
{
if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
task->tFuncId = 3;
@@ -447,7 +447,7 @@ bool8 CheckForTrainersWantingBattle(void)
}
// FRLG exclusive: Scroll the camera up to reveal an offscreen above trainer
-/*static*/ bool8 TrainerSeeFunc_OffscreenAboveTrainerCreateCameraObj(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
+static bool8 TrainerSeeFunc_OffscreenAboveTrainerCreateCameraObj(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
{
int specialObjectId;
task->tData5 = 0;
@@ -458,7 +458,7 @@ bool8 CheckForTrainersWantingBattle(void)
return FALSE;
}
-/*static*/ bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveUp(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
+static bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveUp(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj)
{
u8 specialObjectId;
TryGetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_CAMERA, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &specialObjectId);
@@ -481,7 +481,7 @@ bool8 CheckForTrainersWantingBattle(void)
return FALSE;
}
-/*static*/ bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveDown(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
+static bool8 TrainerSeeFunc_OffscreenAboveTrainerCameraObjMoveDown(u8 taskId, struct Task * task, struct ObjectEvent * trainerObj)
{
u8 specialObjectId;
TryGetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_CAMERA, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &specialObjectId);
@@ -514,7 +514,7 @@ bool8 CheckForTrainersWantingBattle(void)
#undef tTrainerObjHi
#undef tFuncId
-/*static*/ void Task_RevealTrainer_RunTrainerSeeFuncList(u8 taskId)
+static void Task_RevealTrainer_RunTrainerSeeFuncList(u8 taskId)
{
struct Task * task = &gTasks[taskId];
struct ObjectEvent * trainerObj;
@@ -549,7 +549,7 @@ void EndTrainerApproach(void)
StartTrainerApproachWithFollowupTask(Task_DestroyTrainerApproachTask);
}
-/*static*/ void Task_DestroyTrainerApproachTask(u8 taskId)
+static void Task_DestroyTrainerApproachTask(u8 taskId)
{
DestroyTask(taskId);
EnableBothScriptContexts();
@@ -564,7 +564,7 @@ void EndTrainerApproach(void)
#define sData4 data[4]
#define sFldEffId data[7]
-/*static*/ const struct OamData sOamData_Emoticons = {
+static const struct OamData sOamData_Emoticons = {
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
@@ -580,7 +580,7 @@ void EndTrainerApproach(void)
.affineParam = 0,
};
-/*static*/ const struct SpriteFrameImage sSpriteImages_Emoticons[] = {
+static const struct SpriteFrameImage sSpriteImages_Emoticons[] = {
{sGfx_Emoticons + 0x000, 0x80},
{sGfx_Emoticons + 0x040, 0x80},
{sGfx_Emoticons + 0x080, 0x80},
@@ -602,42 +602,42 @@ void EndTrainerApproach(void)
{sGfx_Emoticons + 0x380, 0x80},
};
-/*static*/ const union AnimCmd sAnimCmd_ExclamationMark1[] = {
+static const union AnimCmd sAnimCmd_ExclamationMark1[] = {
ANIMCMD_FRAME( 0, 4),
ANIMCMD_FRAME( 1, 4),
ANIMCMD_FRAME( 2, 52),
ANIMCMD_END
};
-/*static*/ const union AnimCmd sAnimCmd_DoubleExclMark[] = {
+static const union AnimCmd sAnimCmd_DoubleExclMark[] = {
ANIMCMD_FRAME( 6, 4),
ANIMCMD_FRAME( 7, 4),
ANIMCMD_FRAME( 8, 52),
ANIMCMD_END
};
-/*static*/ const union AnimCmd sAnimCmd_X[] = {
+static const union AnimCmd sAnimCmd_X[] = {
ANIMCMD_FRAME( 3, 4),
ANIMCMD_FRAME( 4, 4),
ANIMCMD_FRAME( 5, 52),
ANIMCMD_END
};
-/*static*/ const union AnimCmd sAnimCmd_SmileyFace[] = {
+static const union AnimCmd sAnimCmd_SmileyFace[] = {
ANIMCMD_FRAME( 9, 4),
ANIMCMD_FRAME(10, 4),
ANIMCMD_FRAME(11, 52),
ANIMCMD_END
};
-/*static*/ const union AnimCmd sAnimCmd_QuestionMark[] = {
+static const union AnimCmd sAnimCmd_QuestionMark[] = {
ANIMCMD_FRAME(12, 4),
ANIMCMD_FRAME(13, 4),
ANIMCMD_FRAME(14, 52),
ANIMCMD_END
};
-/*static*/ const union AnimCmd *const sSpriteAnimTable_Emoticons[] = {
+static const union AnimCmd *const sSpriteAnimTable_Emoticons[] = {
sAnimCmd_ExclamationMark1,
sAnimCmd_DoubleExclMark,
sAnimCmd_X,
@@ -645,7 +645,7 @@ void EndTrainerApproach(void)
sAnimCmd_QuestionMark
};
-/*static*/ const struct SpriteTemplate sSpriteTemplate_Emoticons = {
+static const struct SpriteTemplate sSpriteTemplate_Emoticons = {
.tileTag = 0xFFFF,
.paletteTag = 0xFFFF,
.oam = &sOamData_Emoticons,
@@ -705,7 +705,7 @@ u8 FldEff_QuestionMarkIcon(void)
return 0;
}
-/*static*/ void SetIconSpriteData(struct Sprite *sprite, u16 fldEffId, u8 spriteAnimNum)
+static void SetIconSpriteData(struct Sprite *sprite, u16 fldEffId, u8 spriteAnimNum)
{
sprite->oam.priority = 1;
sprite->coordOffsetEnabled = 1;
@@ -719,7 +719,7 @@ u8 FldEff_QuestionMarkIcon(void)
StartSpriteAnim(sprite, spriteAnimNum);
}
-/*static*/ void SpriteCB_TrainerIcons(struct Sprite *sprite)
+static void SpriteCB_TrainerIcons(struct Sprite *sprite)
{
u8 objEventId;