Skip to main content
Screenshot of Counter-Strike 1.6 Wallpapers project

It started with a tweet

Someone posted a render of pool day. Just the map, empty, nobody in it. And the replies were all people saying they wanted that as a wallpaper.

I sat with that for about a minute. The engine is twenty years old and it’s documented. The file format is documented. There was really nothing standing between me and this, so I went digging.

Turns out people had already done most of the hard parts. Somebody had written a converter that reads the map format and spits out modern geometry. Somebody else had built the tool that pulls textures out of the old archive files. None of it was joined together, and none of it went anywhere near a browser, but the pieces were sitting there.

So that’s what I did. I wrote the thing in the middle that runs all of it in order, hands each tool what the last one produced, and checks the output at the end. Before I knew it I was orchestrating four different tools at once and getting a real 3D map out the other side.

de_dust2 running as a wallpaper
de_dust2, the most downloaded wallpaper

Materials were the whole job

Honestly, the better question is which materials didn’t give me issues.

Here’s the thing about these maps. They don’t tell you how a surface should look. They tell you what texture goes there and leave you a few scattered hints, and you have to interpret the rest. A glass pane and a solid wall can arrive looking almost identical. So it’s not a conversion, it’s a reading, and you iterate until it stops looking wrong.

Two things fought me the hardest. Translucent windows were the first. I was processing them in a way that made them come out looking so, so weird, and every fix I tried moved the problem somewhere else. Particles were the same deal. Nothing crashed, nothing errored, they just looked off, and off is much harder to chase than broken.

That’s why there’s a pile of debugging tooling in this project that has nothing to do with the wallpapers. I built a way to click any surface in the viewer and dump everything the renderer knows about it, then I wrote those dumps into files. Map by map, surface by surface, with the reported problem next to each one. It was a cat and mouse game and the files were how I kept score.

Sixteen maps came out the other side. Counter-Strike and Half-Life both.

The material inspector open on a surface in crossfire
this tool was crucial for tracking material issues

What the geometry doesn’t come with

Converting a map gets you a shape. It doesn’t get you the place.

Water is flat and dead. The lights that flicker in the original don’t flicker. Every map has ambient sound sitting at specific points in the world and none of it comes along. The textures that cycle through frames just freeze on frame one. All of that lives in the map file too, in a form no 3D format has a slot for, so I read it separately and rebuilt each piece on the other side.

fy_pool_day, the original inspiration

The camera angles were the best find. Most of these maps ship with a handful of positions the original game used for the between-round view, chosen by whoever built the map back then. Those are the shots. Someone already picked the best angle in these places twenty years ago and it was sitting in the file the whole time.

Some maps didn’t come with any, though. So for those I went in and found the spots myself, which meant building a second thing: a way to fly through a map, frame a shot, save the position, and write the whole set out as a file the wallpaper reads back. Picking angles by hand turned out to be one of the more fun parts of this. You end up wandering around a place you used to know at a running sprint, slowly, looking for the view.

Either way, the wallpaper cycles through the set and drifts a little toward your mouse.

de_survivor, my favorite map of cs

The day everything broke at once

Months after launch, the reports started. Everybody’s wallpaper was failing to load, and the screen they got instead was the browser crash page. It was happening to people on completely different machines with completely different hardware, all at once.

I hadn’t touched those wallpapers since February. Nothing changed on my side.

So I bisected. I rebuilt the same wallpaper over and over, stripping one thing out each time, and stress-tested every version by loading it fifty times in a row. Compressed model, uncompressed model. No compression code at all. No post-processing, no shadows. The smallest map I had, under a megabyte. Every single variant still crashed, and it crashed randomly, which is the worst kind. Load it enough times and it would come up fine and then run perfectly for hours.

I wrote it all up and sent it in, and the developer actually picked it up and worked through it with me. The cause was one line I’d have never suspected. I had a dropdown that hides itself the moment the page boots, and hiding a dropdown that fast crashes the browser engine underneath. It’s a known bug. Other people had found it. It’s still open.

Finding it wasn’t satisfying so much as clarifying. These platforms are more brittle than they look, and the thing that takes down twenty thousand desktops can be a select element disappearing a few milliseconds too early.

cs_office in the snow, seen from the car park
cs_office, my second favorite

What happened when I posted it

I put it on Reddit, on the Counter-Strike and Wallpaper Engine subreddits, and people went genuinely crazy for it. It went viral. We ended up at around twenty thousand installs.

I’m not going to pretend that’s normal. It’s a wallpaper. You don’t expect a wallpaper to have twenty thousand users. Almost every map is up there now, free, and people kept showing up in the comments asking for specific ones.

Why this one

I run one of these on my Windows machine.

Part of it was just wanting to use something I made. But the bigger part is what an empty map does to you. You know how you can walk past a place you spent enough time in that you know every corner of it, every weird little detail nobody else would notice? That’s what these are. No players, no scoreboard, no round timer. Just the place, quiet, at the angle somebody framed it at two decades ago.

It’s serene in a way I didn’t expect when I started. And there’s something about it sitting behind everything else on your computer, underneath the windows and the work, that I think looks really, really cool. It’s a window into a great era, and it turns out a lot of people wanted that window too. That made me happy.

Working on something similar?

I'd love to hear what you're building. For me, the best projects start with a good conversation, so feel free to reach out.

Let's Talk