City Wars: An Online GTA Clone
Game DevWebGLMultiplayer

City Wars: An Online GTA Clone

A browser-based multiplayer IO game I built for my graduation project, inspired by the original top-down GTA from 1997.

HC
Honza Charamza February 2026 · 3 min read
STATUS Archived
STARTED May 2018

For my high school graduation project I wanted to build something I’d actually enjoy working on. A browser-based multiplayer game in the style of the original GTA from 1997 seemed like no-brainer.

Proving it was possible

Before committing to the full project I built a quick throwaway prototype called World of Osenice. Just green circles, a server, and WebSocket sync. Not a game, really. More of a sanity check that real-time multiplayer in the browser was actually doable before spending months on it.

World of Osenice prototype

The throwaway prototype. Multiplayer worked. Everything else was a placeholder.

It was. So I started the real thing.

Stack for the real deal: Dart (compiled to JS) on the client, WebGL for rendering without any game engine, Node.js with Socket.IO on the server. City maps designed in Tiled, building models from Blender.

The textured version (slow)

The first real version of Citywars tried to look like actual GTA. Textured tiles, brick buildings, proper streets. It looked pretty good and ran at about 12 FPS. WebGL without culling or batching will do that.

First textured version
Tiled map editor

Left: The textured city. Right: Designing the map layout in Tiled.

The minimalist phase (ugly)

Stripped everything back to flat colors to fix performance. It worked, but now it looked like a geometry test. Roads were especially bad because diagonal cuts between tiles left obvious seams.

Minimal flat version
Minimal version with 3D buildings

Performance fixed, aesthetics destroyed.

The final version

Landed somewhere in between. Pixel art sprites for players and cars, proper city tilemap, terrain variation, 3D buildings in 2.5D. It finally looked like something worth playing.

Final game version
Final game version desert area

The shipped version. Two different map areas.

What I learned

It shipped with real-time multiplayer, driveable cars, weapons, 2.5D buildings, and a particle system. For a solo school project it came out better than I expected.

The main things it taught me: raw WebGL is a time sink, real-time multiplayer state sync is harder than it looks, and fixing performance late in the project is painful.

And in the end this lead me to a long lasting love of building real-time based systems.