diff options
-rw-r--r-- | asm/event_object_movement.s | 1894 | ||||
-rw-r--r-- | data/event_object_movement.s | 63 | ||||
-rw-r--r-- | include/event_object_movement.h | 24 | ||||
-rw-r--r-- | include/field_effect_helpers.h | 3 | ||||
-rw-r--r-- | include/field_ground_effect.h | 24 | ||||
-rw-r--r-- | include/metatile_behavior.h | 16 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/battle_setup.c | 2 | ||||
-rw-r--r-- | src/event_object_80688E4.c | 5 | ||||
-rw-r--r-- | src/event_object_movement.c | 942 | ||||
-rw-r--r-- | src/metatile_behavior.c | 18 | ||||
-rw-r--r-- | src/trainer_see.c | 144 |
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; |