Inspiration

The Game Jam theme was "Four Seasons." Instead of just painting the track in four colours, we wanted each season to change how you actually race, so one lap feels like four different challenges.

What it does

Season Drift is an arcade multiplayer racer that runs in the browser. One looping lap is split into four sectors, and each season plays differently:

  • Spring: fly through chains of petal clusters to build speed.
  • Summer: your engine heats up. Hop into cloud shadows and brake to keep it cool.
  • Autumn: kick leaves at your rivals while dodging leaf waves and falling branches.
  • Winter: cross a slippery frozen lake, stop on heater pads to shed snow, and avoid snow drifts.

Ways to play:

  • Solo against three bots, with adjustable difficulty.
  • Split-screen for two players on one computer.
  • Two devices online, joined with a 4-letter room code.

Controls: WASD or arrow keys, or a gamepad. Esc pauses, M mutes, and keys can be remapped in Settings.

Accessibility: remappable keys, colour-blind helpers, reduced flashes and screen shake, volume and graphics settings, and adjustable bot difficulty.

How we built it

  • Game: TypeScript and Three.js (WebGL), built with Vite.
  • Multiplayer server: Node.js with Express and Socket.IO, using room codes for two-device races.
  • Art and sound: everything is made in code. The low-poly world is generated procedurally and the sound is synthesized live with the Web Audio API, so the game uses no asset files.
  • Testing: scripts check the track and run simulated laps and races without a screen.
  • Hosting: set up for Render, with a Cloudflare tunnel option for a quick public link.

Challenges we ran into

  • Making four seasons feel like four different driving skills, not just four colours.
  • Keeping two players in sync over the network.
  • Building all the art and sound in code, with no image or audio files.

Accomplishments that we're proud of

  • A full racer with solo, split-screen and online modes, built during a hackathon.
  • Every season adds its own mechanic to the same lap.
  • Accessibility options built in from the start.
  • Zero asset files: every model and sound is generated.

What we learned

How to turn a theme into gameplay, how to build real-time multiplayer with Socket.IO, and how far procedural art and synthesized sound can go.

What's next for Season Drift

More tracks, more players per race, and online matchmaking.

Built with: typescript, three.js, webgl, vite, node.js, express, socket.io, web-audio-api, render

Try it out: https://github.com/Yamandangol/season-drift

Share this project:

Updates

Submission history