Sunday, 21 June 2026

Police Simulator: Patrol Officers


Welcome to Brighton! Join the police force of this fictitious American city and experience the day to day life of a Police Officer. Start with citing violations and giving out parking tickets, then work your way towards shouldering more responsibilities. Be part of the community of Brighton, get to know your neighborhood and handle daily police work to fight crime during your shift. Always be tough, but fair: respect the law and gain more experience to unlock more neighborhoods, districts and duties.

Fact Sheet

Company:  Aesir Interactive

Engine: Unreal Engine 4 (later ported to Unreal Engine 5)

Platforms: Steam, XBox One, XBox Series X|S, PS4, PS5, Nintendo Switch (Outsourced Port)

Release: Nov 10, 2023

Team Size: 20-40

Systems I owned: Editor tooling for Callouts and Traffic, Border Patrol, UE5 Port (solo)


My Work

I contributed to Police Simulator occasionally before launch on topics where I had more experience than the core team, like console support and loading screens, then joined the live team full-time for the Highway and Contraband DLCs.

In-editor traffic and road-network tooling. The original pipeline generated the city's roads, intersections, and traffic data in Houdini, where it was baked and effectively hardcoded, which meant level designers couldn't author or iterate on the road network themselves. For the DLCs I built tooling that let designers set up streets, intersections, and traffic rules directly in the Unreal editor, with live previews and validation as they worked. Rather than replace the existing static Houdini data, the system patched on top of it non-destructively at edit time, so all the pre-DLC city data stayed intact and compatible. Since we no longer had a Houdini license, I had to reverse-engineer the format of the baked output, then generate matching data and layer the new road networks onto it. I also wrote a commandlet that regenerated and validated the network on CI (TeamCity), so the data could be rebuilt and checked automatically. The impact was large: the legacy Houdini pipeline took up to 17 hours to generate the base city, whereas with the editor tooling designers iterated with instant previews, and only the final bake and patch step took roughly 10 to 15 minutes.

A solo Unreal Engine 5 port. Porting the game to UE5 had been requested and evaluated several times, and I took it on as an experiment. Most of it went smoothly: fixing compiler errors, updating plugins, migrating from the deprecated PhysX to Chaos, and getting it running across all consoles. The blocker was the move from World Composition to World Partition. Epic's conversion tooling handles the cells and level itself easily, but a game that had run on World Composition for around five years had an enormous amount built specifically around it: streaming, asset optimizations sized to World Composition cells, level proxies, pedestrian and traffic agent spawning and despawning, level loading, lighting streaming, and indoor streaming. Untangling all of it turned out not to be worth the cost, so we made the call to shelve the port. The experiment was valuable in its own right: it told us precisely what a real migration would require.


Post Mortem

Moving the road and traffic setup into editor tooling was the right call, even though it meant rebuilding capability that already existed in Houdini. The time it saved designers more than paid back the duplicated work. Running the two approaches side by side, static Houdini-baked data with the editor patching on top of it, was messier than ideal, and if we were starting the project fresh today we'd skip Houdini for this entirely and author it natively from the start. That's an easy thing to say with years of hindsight the original team didn't have, but it's where I'd land now.

On the UE5 port, I'd spend far more time up front mapping how the game's systems depended on the engine before diving in. We had flagged the Houdini plugin and console support as the biggest risks and didn't seriously weigh World Partition at all, since the existing conversion commandlet made it look trivial. The real cost wasn't the world conversion itself but everything built around World Composition over years of development, which the commandlet doesn't touch. The deeper lesson is to question the value of the upgrade in the first place: it would have been a purely technical migration with no benefit to gameplay, which is a lot of effort for something players would never feel.