Procedural level generation in world 3
It's been quiet on this project for a while, but I just wanted to share that I am still working on it as much as I can. Most of my work is for content outside of the demo, so there's not much to update here. Here's a little technical info on what I've been working on and the challenges involved:
The 3rd world was always planned to have a less organic level layout and feel more like close quarter combat. I want the level to feel more like separate rooms with doors between them instead of the huge "cave system" in world 1. So a large chunk of the work in the last few weeks was to get that just right. Here's how I currently do it:
- The rooms centers are randomly selected via poisson disk sampling.
- Room sizes are randomly selected as axis aligned boxes. At this step, the boxes might overlap.
- One-by-one, the rooms are rasterized into two grids: The actual level and a 'blocked' grid, which extends the rooms by some spacing value. Subsequent rooms are never rasterized into blocked cells. I'm using the biggest rectangle in a bitmap algorithm, which I just explained in another blog article, to select one or two of the biggest rectangles (meeting certain minimum size criteria) that can be placed in the region under the initial axis aligned bounding box while considering blocked cells. So in addition to the ordinary rectangle-shaped room, this gives me L-shaped and cross-shaped rooms.
- The room are then connected. For that I first build a proximity graph of the centers. Then I find the MST on that and close some loops (with a minimum size) in it.
- Those connections are rasterized by looking at opposite edges, i.e. edges facing each other, in the previously selected room shapes. Possible corridors are rejected if they connect more than just those two edges, e.g. if they break an existing wall other than the ones they are connection. Among the remaining options, the shortest one is selected and rasterized.
- The start and end rooms are selected from the initial connection graph.
- The rasterized grid is converted into a polygonal representation via a marching square algorithm.
Here's how that looks:

I'm pretty pleased with the results, although all the parameters still require some tuning.
Get You Are Circle
You Are Circle
Snappy neon twin-stick bullet-hell roguelite where a circle becomes unstoppable.
| Status | In development |
| Author | ltjax |
| Genre | Action |
| Tags | 2D, Fast-Paced, Minimalist, Roguelike, Roguelite, Singleplayer, Top down shooter, Twin Stick Shooter, Vector |
| Languages | German, English |
| Accessibility | Configurable controls |
More posts
- Small Bugfix UpdateJun 04, 2026
- Demo updated!May 07, 2026
- Patch Notes v0.25Jan 15, 2026
- Tons of new features!Jan 13, 2026
- 'Tis the season - Patch Notes v0.23Dec 18, 2025
- Patch Notes v0.22Dec 04, 2025
- Patch Notes v0.21Nov 20, 2025
- Patch Notes v0.20Oct 23, 2025
- Patch Notes v0.19Oct 02, 2025
Leave a comment
Log in with itch.io to leave a comment.