Evasive hop
A short jump away from a target, usually backward or to a side, set by the stick's direction relative to the character's facing.
On this page
An evasive hop jumps clear of a target without turning away from it. In The Legend of Zelda: Ocarina of Time, A sorts the stick into quarters around Link’s facing1,2. Backward is a backflip, higher and shorter; a side hop is lower and faster3.
- Stick quarterThe Legend of Zelda: Ocarina of Time (1998). A with the stick back or to a side: a backflip at 5.8 up and 6.0 back, or a side hop at 3.5 up and 8.5 across.1,2,4,3
Games
| Game | Year | How | Note |
|---|---|---|---|
| The Legend of Zelda: Ocarina of Time | 1998 | Stick quarter | A with the stick back or to a side: a backflip at 5.8 up and 6.0 back, or a side hop at 3.5 up and 8.5 across |
Every claim about this mechanic, by game (4)
References
- ^ abIn the N64 NTSC 1.0 code, each update sorts the control stick into one of four quarters relative to the way Link's model faces: forward, left, backward, or right, each 90° wide and centered on its direction, after turning the stick angle by the camera's. Below a magnitude of 55 the stick counts as no direction.Codezeldaret/oot
How we know
2212 sControlStickWorldYaw = Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)) + sControlStickAngle; ⋮ 2216 if (sControlStickMagnitude < 55.0f) { 2217 direction = PLAYER_STICK_DIR_NONE; ⋮ 2221 direction = (u16)((s16)(sControlStickWorldYaw - this->actor.shape.rot.y) + 0x2000) >> 14;
src/overlays/actors/ovl_player_actor/z_player.c lines 2211–2223 at 14759ab · upstream ↗ 639 /* -1 */ PLAYER_STICK_DIR_NONE = -1, 640 /* 0 */ PLAYER_STICK_DIR_FORWARD, 641 /* 1 */ PLAYER_STICK_DIR_LEFT, 642 /* 2 */ PLAYER_STICK_DIR_BACKWARD, 643 /* 3 */ PLAYER_STICK_DIR_RIGHT
include/player.h lines 639–643 at 14759ab · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abIn the N64 NTSC 1.0 code, the action handler the decomp calls Player_ActionHandler_10 acts on a press of A, except in a room of the indoors type, on floor type 7, or on a floor with floor effect 1 (both unnamed): with the stick backward, left, or right it starts a hop that way; with the stick forward or neutral, only while Z-targeting, it starts a jump slash if Link holds a melee weapon and can use items, and a roll otherwise.Codezeldaret/oot
How we know
6388 if (CHECK_BTN_ALL(sControlInput->press.button, BTN_A) && (play->roomCtx.curRoom.type != ROOM_TYPE_INDOORS) && 6389 (sFloorType != FLOOR_TYPE_7) && 6390 (SurfaceType_GetFloorEffect(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) != FLOOR_EFFECT_1)) { 6391 controlStickDirection = this->controlStickDirections[this->controlStickDataIndex]; ⋮ 6393 if (controlStickDirection <= PLAYER_STICK_DIR_FORWARD) { 6394 if (Player_IsZTargeting(this)) { ⋮ 6398 } else { 6399 Player_SetupRoll(this, play); ⋮ 6401 } else { 6402 if ((Player_GetMeleeWeaponHeld(this) != 0) && Player_CanUpdateItems(this)) { 6403 func_8083BA90(play, this, PLAYER_MWA_JUMPSLASH_START, 5.0f, 5.0f); 6404 } else { ⋮
src/overlays/actors/ovl_player_actor/z_player.c lines 6385–6417 at 14759ab · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abIn the N64 NTSC 1.0 code, the backward hop (a backflip, by its animation) launches Link at a vertical velocity of 5.8 and a horizontal speed of 6.0 aimed straight behind his facing, and a sideways hop at 3.5 up and 8.5 aimed 90° to the left or right. The vertical value is multiplied by a water factor, sWaterSpeedFactor, which this pass didn't read.Codezeldaret/oot
How we know
6368void func_8083BCD0(Player* this, PlayState* play, s32 controlStickDirection) { 6369 func_80838940(this, D_80853D4C[controlStickDirection][0], !(controlStickDirection & 1) ? 5.8f : 3.5f, play, ⋮ 6377 this->yaw = this->actor.shape.rot.y + (controlStickDirection << 0xE); 6378 this->speedXZ = !(controlStickDirection & 1) ? 6.0f : 8.5f;
src/overlays/actors/ovl_player_actor/z_player.c lines 6368–6378 at 14759ab · upstream ↗ 4982void func_80838940(Player* this, LinkAnimationHeader* anim, f32 arg2, PlayState* play, u16 sfxId) { ⋮ 4989 this->actor.velocity.y = arg2 * sWaterSpeedFactor;
src/overlays/actors/ovl_player_actor/z_player.c lines 4982–4989 at 14759ab · upstream ↗ 1120static LinkAnimationHeader* D_80853D4C[][3] = { ⋮ 1123 { &gPlayerAnim_link_fighter_Lside_jump, &gPlayerAnim_link_fighter_Lside_jump_end, ⋮ 1125 { &gPlayerAnim_link_fighter_backturn_jump, &gPlayerAnim_link_fighter_backturn_jump_end, ⋮ 1127 { &gPlayerAnim_link_fighter_Rside_jump, &gPlayerAnim_link_fighter_Rside_jump_end,
src/overlays/actors/ovl_player_actor/z_player.c lines 1120–1128 at 14759ab · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^In the N64 NTSC 1.0 code, the action that holds Link standing while he Z-targets (Player_Action_808407CC in the decomp) offers the hop handler to A, and hands control to the idle action once Z-targeting ends; the idle action's own handler list leaves the hop handler out.Codezeldaret/oot
How we know
4174static s8 sActionHandlerList2[] = { 4175 PLAYER_ACTION_HANDLER_13, PLAYER_ACTION_HANDLER_1, PLAYER_ACTION_HANDLER_2, PLAYER_ACTION_HANDLER_5, 4176 PLAYER_ACTION_HANDLER_3, PLAYER_ACTION_HANDLER_TALK, PLAYER_ACTION_HANDLER_9, PLAYER_ACTION_HANDLER_10, 4177 PLAYER_ACTION_HANDLER_11, PLAYER_ACTION_HANDLER_7, PLAYER_ACTION_HANDLER_8, -PLAYER_ACTION_HANDLER_ROLL,
src/overlays/actors/ovl_player_actor/z_player.c lines 4174–4178 at 14759ab · upstream ↗ 4201static s8 sActionHandlerListIdle[] = { 4202 PLAYER_ACTION_HANDLER_0, PLAYER_ACTION_HANDLER_11, PLAYER_ACTION_HANDLER_1, PLAYER_ACTION_HANDLER_2, 4203 PLAYER_ACTION_HANDLER_3, PLAYER_ACTION_HANDLER_5, PLAYER_ACTION_HANDLER_TALK, PLAYER_ACTION_HANDLER_9, 4204 PLAYER_ACTION_HANDLER_8, PLAYER_ACTION_HANDLER_7, -PLAYER_ACTION_HANDLER_ROLL,
src/overlays/actors/ovl_player_actor/z_player.c lines 4201–4205 at 14759ab · upstream ↗ 8158 if (!Player_TryActionHandlerList(play, this, sActionHandlerList2, true)) { 8159 if (Player_UpdateHostileLockOn(this)) { 8160 func_8083CEAC(this, play); 8161 return; ⋮ 8164 if (!Player_FriendlyLockOnOrParallel(this)) { 8165 Player_SetupActionPreserveAnimMovement(play, this, Player_Action_Idle, 1); 8166 this->yaw = this->actor.shape.rot.y; 8167 return;
src/overlays/actors/ovl_player_actor/z_player.c lines 8158–8167 at 14759ab · upstream ↗ 4259 Player_ActionHandler_10, // PLAYER_ACTION_HANDLER_10src/overlays/actors/ovl_player_actor/z_player.c line 4259 at 14759ab · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
Sources
Code
- zeldaret. 2026. “oot: a decompilation of The Legend of Zelda: Ocarina of Time (zeldaret/oot).” Commit 14759ab. zeldaret/oot @ 14759ab · licence, all uses