Freeing Entities from the Grid

In Prison Architect, every entity — prisoner, guard, item, tree — is ultimately tied to a tile. The grid is the world, and the engine assumes that all entities can be reduced to a tile index. That works fine for a flat, strictly tile-based game, but it comes with trade-offs: Anything that doesn’t really “fit” into a single tile (like multi-tile objects, diagonal movement, or smooth animation) ends up bolted on awkwardly. Remember how in Prison Architect you tried to place a 1-tile chair at a 2-tiles table ending up with one or another side but not the middle? Precise positioning isn’t possible — everything snaps to the grid whether it looks right or not. Yes, in Prison Architect entities are moving seemingly smoothly, but it’s achieved with rendering quirks such as decoupled render-specific attributes in the entity and floating-point additions/subtractions which are fundamentally prone to errors and are significantly slower than these operations done on integer values. In Prison Architect, the source of truth is still tiles, and every movement apparently requires interpolation of the rendered pixel coordinate to the tile index. For every step of move. In every draw iteration. Modders quickly hit limits when trying to represent entities that should move more naturally. Want to add a helicopter? In Prison Architect, it (I assume) still participates in collision detection as a tile-bound entity. A small bin under an office desk? Impossible in Prison Architect. A small bin next to a small coat hanger? In Prison Architect, they take as much space as two fridges. I decided to take a different approach. ...

August 24, 2025

Going Vertical: Multi-Floor Maps

One of the first big design choices I made was to break away from Prison Architect’s flat map. In PA, everything happens on a single plane: walls, rooms, entities, and jobs all share the same 2D grid. That’s simple, but it means no basements, no bridges, no multi-level facilities. When I set out to design my own engine, I knew I wanted true multi-floor gameplay. Multi-floor buildings. Underground tunnels. Rooftop yards. A real sense of vertical space. ...

August 17, 2025

Rethinking Walls: Between Tiles, Not Inside

One of the more subtle design changes in my game compared to Prison Architect is where walls live. In Prison Architect, a wall occupies an entire tile. In my engine, walls live between tiles — exactly where you’d expect them in real architectural terms. This may seem like a small shift, but it unlocks a lot. The Problem with Tile-Occupying Walls In PA, walls are just tile entities. When you place a wall, it takes over the tile. ...

August 17, 2025

Automatic Texture Atlasing for Modders

One of the most annoying parts of modding 2D games — especially tile-based ones — is dealing with spritesheets and texture atlases. If you’ve modded Prison Architect, RimWorld, or similar games, you’ve probably had to: Cram your sprites into a shared PNG file Copy paste into exact pixel-aligned grid slots Maintain an accompanying XML or Lua file with offsets, pivots, and sizes Rebuild everything if just one image changed It’s tedious, error-prone, and downright unfriendly for casual modders. ...

August 6, 2025

Why I Use ECS (and What That Means for Modding)

My game is built on top of an ECS — short for Entity-Component-System architecture. If you’ve never used one before, this post will explain what it is, how it compares to traditional Object-Oriented Programming (OOP), and why it’s such a good fit — especially for a simulation-heavy, modding-friendly game like this one. What is ECS? ECS is a way of organizing game data and behavior by separating what something is from what it does. ...

June 8, 2025

Building a Better Prison Architect — For Modders

I’m starting something new: a Prison Architect-inspired game, rebuilt from scratch with one core goal front and center: make modding first-class. If you’ve ever created or maintained mods for Prison Architect, you probably know the struggle: Want to add a new need or status effect? You’re out of luck — hardcoded. Want to tweak how AI prioritizes jobs? Better grab a hammer, because there’s no real interface for that. Want a new UI panel? Prepare to inject Lua into undocumented corners of the engine and pray the next update doesn’t break it. That’s the kind of friction I’m eliminating. ...

June 8, 2025