mirror of https://github.com/pret/pokeemerald.git
Created Omnidirectional Jump (markdown)
parent
3e6bab718f
commit
44ffca8eb8
|
@ -0,0 +1,61 @@
|
||||||
|
## Omnidirectional Jump
|
||||||
|
|
||||||
|
credits to ghoulslash
|
||||||
|
|
||||||
|
This tutorial teaches you how to create a tile behavior that lets you jump over it from any direction
|
||||||
|
<a href="https://imgur.com/fT9c6ZV"><img src="https://imgur.com/fT9c6ZV.gif" title="source: imgur.com" /></a>
|
||||||
|
|
||||||
|
### 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);
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in New Issue