Skip to content
Pixel Art Studio · agent-built fighting scene · 256 × 144

Ashen Peak

A one-round fight in the style of Mortal Kombat: side view, health bars, a round timer, call-outs, combos and knockdowns, on a temple court at dusk. The fighters are original: Riku, a quick monk who fights with kicks, against Grimhold, an armoured giant. Krea 2 drew their two designs and nothing else. Every animation frame, the stage, the HUD and the effects were drawn in code, pixel by pixel.

137 character frames, all reviewed28 moves0 pinholes, 0 floating pieces360 ticks · 28.8 s loop3 plugin files, identical to the original frames
The full fight loop

The full round at 4×. The GIF is 256 × 144 native, scaled up by your browser without smoothing.

The round, beat by beat

Round 10 – 2.9 sRound 1The camera settles on the temple court; ROUND 1, then FIGHT!
Three hits2.4 – 5 sThree hitsRiku walks in: jab, cross, then a roundhouse to the head. 3 HITS.
The charge5 – 8.5 sThe chargeGrimhold's hook is blocked, then his shoulder charge flattens Riku.
Over the wave9 – 11 sOver the waveThe ground slam sends a shockwave; Riku jumps it and lands a flying kick.
Sun Palm11.7 – 12.6 sSun PalmWhile Grimhold roars, Riku's fireball crosses the court and bursts.
Launched13 – 17 sLaunchedGrimhold's uppercut throws Riku into the air; he hits the stones.
Sweep17.6 – 21 sSweepRiku sweeps the giant off his feet.
Thousand Suns21 – 24 sThousand SunsA second charge whiffs. Riku lands four burning strikes...
K.O.24 – 25 sK.O....and a flaming uppercut: a hit-freeze, K.O.
Riku wins25 – 28.8 sRiku winsThe giant lies still, the medallion lights, RIKU WINS, fade.

Riku

P1 · the monk · 15 pieces · 16 moves · 76 frames
Krea 2 designKrea 2 design
64-grid version64 grid, scene palette
riku Stance
Stance · 6
riku Walk
Walk · 8
riku Jab
Jab · 4
riku Cross
Cross · 4
riku Roundhouse
Roundhouse · 6
riku Sweep
Sweep · 5
riku Jump
Jump · 5
riku Flying kick
Flying kick · 3
riku Uppercut
Uppercut · 5
riku Sun Palm
Sun Palm · 6
riku Block
Block · 2
riku Hit
Hit · 3
riku Knockdown
Knockdown · 6
riku Get up
Get up · 4
riku Launched
Launched · 3
riku Victory
Victory · 6
His 15 pieces (stacked, they equal the design: 0 px different)
Riku's pieces

Grimhold

P2 · the armoured giant · 14 pieces · 12 moves · 61 frames · mirrored in the fight
Krea 2 designKrea 2 design
64-grid version64 grid, scene palette
grimhold Stance
Stance · 6
grimhold Stomp walk
Stomp walk · 8
grimhold Hook
Hook · 6
grimhold Shoulder charge
Shoulder charge · 6
grimhold Ground slam
Ground slam · 7
grimhold Uppercut
Uppercut · 6
grimhold Roar
Roar · 4
grimhold Block
Block · 2
grimhold Hit
Hit · 3
grimhold Knockdown
Knockdown · 6
grimhold Get up
Get up · 4
grimhold Launched
Launched · 3
His 14 pieces (stacked, they equal the design: 0 px different)
Grimhold's pieces

Stage, HUD and effects

Six parallax layers scroll at different speeds as the camera follows the fighters: the sky, far peaks, near peaks with snow lit pink, the temple with swaying lanterns and rippling banners, the courtyard, and plum branches in front. Petals drift across the court.

the stage's parallax layersThe six layers, each shown alone.
HUDHealth bars with a red ghost of lost health, the timer, names, round medallions, a hand-drawn 11 px call-out font, the combo counter.
effectsThe Sun Palm fireball, the ground slam's shockwave, dust, block and hit sparks, the flaming uppercut arc, speed lines.

How the characters stay whole

The goal: characters that never tear. Every frame passed these checks. The agent skill holds the same checks.

In the plugin

DocumentCanvasLayersFramesTagsPlugin render vs original
Riku.pas128 × 96167616 movesidentical
Grimhold.pas128 × 96156112 movesidentical
AshenPeak.pas400 × 14468Ambientidentical

The agent skill

The whole method, as an agent skill: skills/pixel-scene/ in this repository.

Reproduce it

The fight is in this repository and rebuilds from the two designs with no GPU: about three minutes on a laptop, with Python 3.10+ and Pillow, NumPy and SciPy (requirements.txt). Run from the repository root; everything is written to out/scenes/ashen_peak/. The frames come out identical to the GIF above.

python scenes/ashen_peak/riku.py           # 15 pieces; the stack equals the design (0 px)
python scenes/ashen_peak/grimhold.py       # 14 pieces
python scenes/ashen_peak/riku_anim.py      # 76 frames: "pinholes/specks: none"
python scenes/ashen_peak/grimhold_anim.py  # 61 frames
python scenes/ashen_peak/fight.py          # the 360-tick round: ashen_peak.gif
python scenes/ashen_peak/fsheet.py riku stance,walk,jab 3   # a review sheet with the ground line and pinhole counts

The designs came from scenes/ashen_peak/designs.sh (Krea 2 through scripts/krea.py, needs ComfyUI); the picked ones are in scenes/designs/. The three .pas files are in scenes/pas/. To rebuild them, export.py drives a scratch Unity project with unity/PasBuilder (see scenes/README.md).