Insert coin

Warming up the cabinet. The live scene drops in here in a moment.

Last Token

A WebGL study in animation, controls and interaction

Last
Token

An isometric arcade that closed decades ago, still running on its final credit. Behind this text the robot is idling on his podium, live. Scroll to the end and the camera pulls back over the floor, where you can make him dance. Every prop, sound and voice line here was generated and wired by hand.

Real time WebGL 242 objects 120 BPM 2026

Scroll — the camera pulls back

Artwork

The strip

Marquees and props, generated for the level and cut by hand. The three signs are mounted on posts in the scene; the props were reconstructed into 3D and placed on the floor.

Galaxy Drift marquee
Galaxy Driftnorth sign
Token Rush marquee
Token Rusheast sign
Disco Panic marquee
Disco Panicwest sign
Pixel art arcade screen
Attract modecabinet screen
Speaker tower reference
Speaker towerprop reference
Photo booth reference
Photo boothprop reference
Neon palm reference
Neon palmprop reference
Arcade cabinet reference
Cabinetprop reference
Research

First ideas

Before anything was modelled, the level was argued out in pictures: how high the neon sits, where the checkerboard stops, what a station looks like from above. Most of these never made it in whole, but they set the palette and the rules.

Neon floor concept
Neon floorThe grid, the glow line, the black around it
Dance floor station concept
Dance stationLit tiles as a place you stand, not decoration
Checker and boombox concept
Checker & radioWhere the black-and-white belongs
HUD and arcade concept
HUD & cabinetsWhat the screen furniture should feel like
8-bit zone concept
8-bit zoneThe pixel language for the cabinet screen
Marquee sticker sheet
Marquee sheetSix signs generated together, then cut out by hand
Character

Building the robot

The hero took the longest road: drawn, reconstructed into geometry, rigged, then rebuilt again in Blender when every clip turned out to float a few units above the floor.

1Robot concept render
ConceptThe character, before it had any geometry
2Robot turnaround views
TurnaroundViews generated so it could be reconstructed
3Reconstructed robot with baked texture
ReconstructedImage to 3D, chrome and cream baked in
4Robot auto-rigged
RiggedAuto-rigged so it could take motion clips
5Animation clip pack
Clip packEleven clips, merged into one file in Blender
This browser could not start WebGL for the horizon panel.

Two kinds of WebGL on one page: the scene above was authored in an editor and driven by events, this horizon is one quad and a fragment shader, roughly forty lines of maths. Same pixels, opposite ends of the craft.

Build notes

How it was made

Four pipelines feeding one real-time scene, wired through its event system.

The robot

Mixamo clips rebuilt in Blender into a single multi-clip GLB. Importing clips as separate files made the engine keep the base hips height, so every animation floated above the floor. One file fixed it at the source. Eleven clips: idle, walk, run, jump, wave, cheer, thumbs up, look around, samba, hip hop, zombie.

The props

Single-subject references generated per prop, then reconstructed with Tripo image to 3D at v3.1 Ultra: triangles, 40k cap, 8K texture bake exported at 2K, lighting removed from the albedo so the scene's own neon does the shading.

The sound

Every effect is synthesized, not sampled: the shutter is a capacitor whine plus a noise burst, the dance stab is a square-wave arpeggio, the soundtrack is a 120 BPM loop built from kick, snare, hats, square bass and saw arp. The announcer is text to speech directed to sound like a cabinet.

The gating

Trigger zones and conditionals would not fire, so the zones became collision pads that move. A pulsing podium and the bouncing dance tiles re-touch the robot every beat, set a variable, and that variable is bound directly to the effect's geometry. No conditionals anywhere.

The beat

Everything that loops runs on the same 120 BPM grid: the floor ripples in quarter-beat steps, the speakers and radio move on the beat, the disco spots sweep every sixteen. The scene pulses with the music rather than near it.

The light

Twelve lights, exactly one casting shadows. Past that, imported PBR props silently stop rendering while still casting shadows, a failure that looks like a broken import and is not. The disco beams are real spotlights; the earlier mesh beams kept shoving the robot off the stage.

242
objects
11
animation clips
14
sounds & voice
11
3D props
12
lights
120
bpm
Made by

Ana M. Penaranda

and many other tokens of love

Last Token. A real-time WebGL scene, built and driven entirely through code. Animation from Mixamo by way of Blender, props reconstructed with Tripo, marquees and pixel art generated, every sound synthesized or spoken by TTS. Insert coin.

Jump

Your turn

Above these controls a 3D arcade floor is rendering live: a robot stands on a lit octagonal podium, ringed by a checkerboard dance floor, a jukebox, a claw machine, neon palms and a wall of photo-booth prints. The buttons below play an animation on him; the arrow pad walks him around the floor.

Press a button and watch the robot. Walk him with the pad or the arrow keys.