Source: https://shadowfrag.com/blog/a-ninja-that-moves-like-a-ninja/

# A ninja that moves like a ninja

By the SHADOWFRAG developer · Animation · Oct 21, 2026 · 3 min read

The movement worked before the body explained it clearly. I added directional flips and short local effects while keeping animation separate from combat collision.

[Two rows of six later ninja poses; forward and sideways double-jumps rotate the model and cape around the upright wireframe hull.](https://shadowfrag.com/_astro/b54ae0ad3b4873588552b48cec34a7081253f63f16c906f9ffdaa8dcc282ef66.CX2FB5au.png)

The later renderer turns the model through directional flips, with a cape following the pose. Archive date: Oct 21, 2026.

**Update, 26–27 October 2026.** The later blocky-body pass refines the free-arm guard, foot poses during ascent, the apex and descent, and compression on landing, while retaining full flips. Rectangular hands and sleeves replace extra mesh batches, reducing separate groups of geometry used for drawing. Movement physics, combat [hit volumes](https://shadowfrag.com/glossary/#term-hitbox) and network formats are unchanged.

In the early pose sheet, the ninja could perform an airborne move while its body stayed fairly upright. The movement rules worked, but someone watching the model had little help distinguishing the second jump from another change of direction. I wanted that extra jump to look like an action the ninja had deliberately made.

The comparison uses the retained October 18 baseline and October 21 presentation sheet. Each shows forward and sideways sequences sampled in six phases. These are still images taken across the action, not an older recording recreated as video. They make it easier to inspect how the body's orientation changed.

## Turning the model without changing the target

I added directional [double-jump](https://shadowfrag.com/glossary/#term-air-step) flips and refined the leaning poses around the [gameplay hull](https://shadowfrag.com/glossary/#term-hitbox)—the collision shape used to represent the player. The visible body can turn through a move while the server's combat geometry stays the same. A flip should help you recognize what an opponent is doing without secretly changing which shots count as hits.

Capes follow the animated body. Small dust effects mark takeoff, the [air step](https://shadowfrag.com/glossary/#term-air-step) and landing, while shadow smoke marks the departure and arrival of a warp. Those details give the movement visible stages instead of leaving a teleport as a sudden disappearance.

The October 21 effects were deliberately short. A landing effect lasted **0.32 seconds**, takeoff dust **0.18 seconds**, and an [air-step](https://shadowfrag.com/glossary/#term-air-step) puff **0.22 seconds**. They used pools with a limited capacity, so effects could not accumulate without a bound. Each client builds the particles locally instead of receiving their individual state over the network. Effects outside the view are discarded before their drawing geometry is constructed.

## Inspecting the action and checking the cost

The final native movement check covered **33 presentation cases**. Focused tests and [sanitizer checks](https://shadowfrag.com/glossary/#term-sanitizer) for memory errors and undefined behavior passed. The retained record dates the full-suite run separately from the later camera-clearance and dust refinements. It also explicitly records that the palette, weapon designs, [hitboxes](https://shadowfrag.com/glossary/#term-hitbox) and movement physics were preserved.

I measured rendering cost in separate fixed-scene tests. A synthetic crowd flipping at the same time is useful for comparing the cost of drawing different presentations, but it is not a live match and cannot promise a [frame rate](https://shadowfrag.com/glossary/#term-frames-per-second). It also has no bearing on the 64-player game limit.

The aim was for the visible body to explain movement the game already supported: a deliberate [air step](https://shadowfrag.com/glossary/#term-air-step), a recognizable landing, and an opponent whose combat geometry remains consistent throughout the animation.

## A double-jump learned to turn

Actual retained pose sheets, sampled by the renderer [fixture](https://shadowfrag.com/glossary/#term-test-fixture). Six phases run left to right; the first row is forward and the second sideways. These are still samples of animation, not historical video. Faint wire boxes show the aiming hull remaining upright.

[Two rows of six early ninja poses; the model stays upright across the sampled double-jump phases.](https://shadowfrag.com/media/development/jump-early-original.png)

**Earlier presentation**Archive date · Oct 18, 2026

The earlier renderer holds the same upright pose through the sampled phases.

[Original PNG](https://shadowfrag.com/media/development/jump-early-original.png)

[Two rows of six later ninja poses; forward and sideways double-jumps rotate the model and cape around the upright wireframe hull.](https://shadowfrag.com/media/development/jump-current-original.png)

**Later presentation**Archive date · Oct 21, 2026

The later renderer turns the model through directional flips, with a cape following the pose.

[Original PNG](https://shadowfrag.com/media/development/jump-current-original.png)

[Watch the video](null)

**Current motion, captured Oct 22, 2026.** A separate 2.4-second engine demonstration on an isolated stage, shown at 72% speed. Silent; play when ready. The earlier animation survives as the pose sheet above. [Download MP4](https://ds9.dynostatic.com/media.php?id=01M5MDG20SG4N3JX5PY4T4PF69&revision=1)

Still-image archive dates come from retained image file timestamps in Los Angeles time. An earlier-dated article may include later builds; each image is dated separately. Images are genuine engine or native-editor output. [Download sources, transforms and SHA-256 hashes](https://shadowfrag.com/media/development/manifest.json).

[Back to blog](https://shadowfrag.com/blog/)[Browse the glossary](https://shadowfrag.com/glossary/)

## Request an _invite code._

SHADOWFRAG is opening by invitation. Request a code and receive development updates. [Shadow Council](https://shadowfrag.com/glossary/#term-shadow-council) contributors receive priority when invitations begin.

Enable JavaScript to request an invite code and confirm your email address.

Email confirmation required. Codes will be issued later; a request does not guarantee access. Unsubscribe at any time. [Privacy](https://shadowfrag.com/privacy/)

Confirm your email to join the invitation list. Codes will be issued in a future round; a request does not guarantee access. Unsubscribe at any time.

Anyone can request a code. For [Shadow Council](https://shadowfrag.com/shadow-council/) priority, introduce yourself on Discord with your role, experience, region and time zone. Include examples of your maps or content if you have them.

[Join Discord](https://discord.gg/EHj7rZDNj)
