Skip to content
Home

Work / Keep Moving Showdown

Keep Moving Showdown

Game Designer · Programmer · 3D Environment

2026 | Building

Online party game for 2–4 players made in 42 hours for Create Jam Fall 2026. Seven minigames on one rule, stop moving and your fuse burns, and a PS1 environment built with a custom shader instead of bespoke modelling.

Stack

Unity, C#, URP, HLSL, Netcode for GameObjects, PSXIFY

Links

Try the game ↗

Keep Moving Showdown cover
A tournament built on one rule

Keep Moving Showdown is an online party game for two to four players made in 42 hours for Create Jam Fall 2026. Every car carries a roof bomb whose fuse burns while it is stopped, and a match is a tournament of short minigames won by whoever scores the most points. I handled the design, programming and 3D environment; a designer took care of the UI and the logo.

7playable minigames
42 hof jam, from idea to build
2–4online players, one of them hosts

A playable loop first, minigames after

The goal for the first day was not a lot of minigames, but a tournament that could be played from start to finish, even with a single one. By the first night the networked cars, damage, the tournament flow with its transition and ranking scenes, and Sky Is Falling as the first minigame were all working.

With that loop closed, every new minigame was a piece that plugged into something that already worked. They all start from the same stage prefab, with the stadium, camera, HUD and a manager that runs the intro, countdown, eliminations and points table. Each minigame only defines its mechanic, when it ends and how it ranks players.

The second day brought the PSX look, the bomb rule across every mode, Bomb People, Missile Mayhem, Conveyor Chaos and heats. On the last day Treadmill Shift, Dirt Race and Sweeper joined, and the rest of the time went into polish: crash damage, audio and the options menu. Along the way, one of the first day’s minigames, Don’t Fall, was cut.

One rule, seven ways to keep moving

During a round, if the throttle drops below a threshold, the handbrake is held or the car barely moves, a three-second fuse starts. It only resets when the player actually accelerates: coasting or being pushed does not count. Players learn the rule once and each minigame decides what moving means.

Sky Is FallingFour platforms linked by one-car-wide bridges; dodge what drops from the ceiling
Bomb PeopleOpen arena with explosive pedestrians that charge the closest car
Missile MayhemEvery car aims a laser by driving and fires missiles at random intervals
Conveyor ChaosDrive against a belt that drags you into the void while junk rides in; three lives
Dirt RaceTwo laps of a generated dirt circuit; hitting an obstacle head-on lights the fuse
Treadmill ShiftNo driving: arrow combos to shift gear before the treadmill tilts
SweeperNo driving: charge the suspension and jump an arm that spins ever faster

In five minigames the rule applies as is and what changes is the environment: a belt that forces you to accelerate so you don’t fall, obstacles that stop the car and force you to reverse, or pedestrians that make standing still dangerous. Treadmill Shift and Sweeper are the exception: the game moves the car and the player does not drive, so the rule is translated to another input, keeping up with the shifts or jumping in time. The bomb stays on the roof so the car reads the same.

From driving prototype to game

It all started with driving: a top-down grey-box arena with one car, drift, boost and a rotating bar as the first hazard. Tyre marks and smoke were added so drifting reads at a glance.

Handling ended up as an arcade model with one spring per wheel, and each player simulates their own car so it responds the same no matter who is hosting. The boost and its meter were removed on the second day.

The first prototype: grey-box arena, drift and boost, and a rotating bar as the first hazard.

Treadmill Shift: from paper to round

Treadmill Shift was drawn before it was built, and the sketch already holds the complete design: four tilted treadmills with one car each, a gear lever and a row of arrows for the input.

SketchHand-drawn sketch of four tilted treadmills with a car on the first, an arrow pointing to a gear lever and a row of four direction arrows below
The original sketch: four treadmills, the gear lever they feed into and the arrow combo the player has to enter.
In game
Treadmill Shift in the game: the countdown, then the arrow combos that move the lever on the right.

The belts swing between five inclines, one per gear, from 45 degrees in first to flat in fifth. Each shift asks for a four-arrow combo, or six if it jumps two gears. If time runs out the car drops one position, and missing at the very bottom blows it up. A wrong arrow does not break the combo, but it takes 30% of the remaining time.

The lever is drawn as a five-speed H-pattern gearbox: the target gear pulses, a completed combo slams it through neutral and a miss grinds it with the knob turning red. That way pressing arrows reads as a physical action.

A 3D environment without a modeller

We had nobody dedicated to 3D modelling, so the environment needed a workflow where levels could be assembled from basic geometry. The answer was a single custom URP shader used by every material in the game, which handles almost all of the final look.

The same levels in three states: default Unity, textures on Unity’s Lit shader, and the PSX shader with lighting and post-processing.

Texture

Textures are sampled unfiltered at a capped resolution without perspective correction, and vertices snap to a virtual resolution, as on PS1 hardware.

Colour

Colour is reduced to 15 bits with a 4×4 ordered dither and can go through a custom palette, baked into a LUT that picks the nearest colour.

Projection

Textures are projected from world position instead of relying on UVs, so a cube scaled into a wall or a floor keeps the same texel size.

1. Default UnitySweeper with Unity's default grey material
Sweeper built from primitives with the default material.
2. TexturesSweeper with textures on Unity's Lit shader
The same tileable textures on Unity’s Lit shader.
3. PSX shaderSweeper with the PSX shader, spotlight lighting and post-processing
The PSX shader, per-vertex lights, banded occlusion and post-processing.

Lighting follows the rules of the era too. Lights are computed per vertex, through a custom light system that sends the 24 nearest lights to the shader, and tessellated cubes replace Unity’s cube so spotlights leave visible pools on large floors. Ambient occlusion is cut into a few dithered bands, in blocks the size of a 240p pixel, so it reads like colour baked into the vertices rather than a modern effect. On top sit volumetric light cones, blob shadows under the cars, flicker on some lamps and a CRT screen post-process.

With this system, primitives and tileable textures are enough to build levels that hold the style without a bespoke modelling pass. Props are CC0 scans from Poly Haven, converted with PSXIFY, my tool for baking high-poly assets into PS1-style ones, so they fit the same treatment.

Conveyor Chaos split in two: the default scene on the left, the final result on the right
Conveyor Chaos: the belts are scaled cubes; world-projected textures keep the same size on all of them.
Treadmill Shift split in two: the default scene on the left, the final result on the right
Treadmill Shift: without the shader, belts and pillars are grey blocks; with it, rusted metal under spotlights.

To tell players apart, every car gets a livery generated from a seed: colours, pattern, sponsors and race number. Because it is deterministic, the same player drives the same car in the garage, in every minigame and on the podium.

Seven networked minigames without syncing every event

One player hosts and the rest connect through Relay. Most mechanics send no per-event messages: belt speed, the Sweeper arm angle and the whole Treadmill Shift shift sequence are computed from the shared round time and a seed the host hands out at the start, so every machine gets the same result.

Hits follow a common pattern: each car’s owner detects the hit and reports it, and the host checks, with some slack, that the obstacle, missile or arm really was close in its own view before taking a life. That way latency never kills a player for something they had dodged on their own screen.

Tournament structure

A match plays every minigame once, in random order and never the same one twice in a row. Conveyor Chaos, Treadmill Shift and Sweeper are played over several heats that give their own points (4, 3, 2 and 1), and the total decides the placement in that minigame. That placement gives the tournament points, 10, 6, 3 and 1, so a minigame with heats weighs the same as a single-round one. Between minigames, a hallway scene presents the cars one by one, and at the end a podium shows the top three.

My role

Game design · Programming · 3D environment

  • Designed the bomb rule, the seven minigames and the tournament structure.
  • Programmed the driving, multiplayer, minigame and heat flow, and every mechanic.
  • Built the 3D environment and the visual pipeline: the PSX shader, lighting, ambient occlusion and post-processing.
  • Processed the scanned props with PSXIFY to bring them into the style.
  • A designer handled the UI and the logo.

Stack

  • Unity, C#, URP and HLSL shaders
  • Netcode for GameObjects, Unity Relay and Multiplayer Services
  • PSXIFY and CC0 scans from Poly Haven

Credits

Sedan based on “Low-Poly Derby Sedan Base” by S1lMoon. Engine audio by dobroide and crowd audio by dersuperanton (CC BY 4.0), plus other sounds from Freesound.

Explore

Jam build on itch.io · PSXIFY