## Omnidirectional Jump credits to ghoulslash This tutorial teaches you how to create a tile behavior that lets you jump over it from any direction ### Step 1 - create the behavior Open [include/constants/metatile_behaviors.h](../blob/master/include/constants/metatile_behaviors.h). Replace an unused behavior with: e.g.: ```diff -#define MB_UNUSED_1D 0x1D +#define MB_OMNIDIRECTIONAL_JUMP 0x1D ``` ### Step 1 - make the behavior do something Open [src/event_object_movement.c](../blob/master/src/event_object_movement.c), and find `GetLedgeJumpDirection` and replace the entire function with the following: ```c u8 GetLedgeJumpDirection(s16 x, s16 y, u8 z) { static bool8 (*const sLedgeJumpBehaviors[])(u8) = { MetatileBehavior_IsJumpSouth, MetatileBehavior_IsJumpNorth, MetatileBehavior_IsJumpWest, MetatileBehavior_IsJumpEast, }; u8 behavior; u8 direction = z; if (direction == 0) return 0; else if (direction > 4) direction -= 4; direction--; behavior = MapGridGetMetatileBehaviorAt(x, y); if (sLedgeJumpBehaviors[direction](behavior) || MetatileBehavior_IsOmnidirectionalJump(behavior)) return direction + 1; return DIR_NONE; } ``` ### Step 3 - make the function recognize the behavior Open [src/metatile_behavior.c](../blob/master/src/metatile_behavior.c). Add the following at the end of the file ```c bool8 MetatileBehavior_IsOmnidirectionalJump(u8 metatileBehavior) { if (metatileBehavior == MB_OMNIDIRECTIONAL_JUMP) return TRUE; else return FALSE; } ``` Then, open [include/metatile_behavior.h](../blob/master/include/metatile_behavior.h) and add the following somewhere: ```diff +bool8 MetatileBehavior_IsOmnidirectionalJump(u8 metatileBehavior); ``` ### Step 4 - Assign your behavior Give one of your tiles the behavior `MB_OMNIDIRECTIONAL_JUMP` in porymap, and jump for joy!