Procedural Generation per pre-made Chunks of the Backrooms level 0

Hello! I’m Cuba, a small multi-developer who is developing “Project FrontRooms”, a survival-rpg horror backrooms game, with a non-linear system and an open world with a procedural generation.
It’s my first project and yeah, I know it’s big, but I want to polish it as much as possible and make it realistic.

I’ve spent the last few months doing procedural generation using pre-made chunks. After 3 months, 7 prototypes, over 200 hours and 900 lines of code, I’ve finally created the design that I’m most happy with.
This generation includes:

  • Random procedural generation optimized to work on low-budget computers.
  • Percentage of appearance of each biome and each “chunk”, as well as being able to spawn special chunks.
  • Continuity in each biome.
  • Although chunks are created and deleted, their position is saved so if you return it will still be the same scenario.
  • Each server has its own seed, that is, each server will have its own random map.
  • Each chunk is randomly rotated, creating more diversity.
  • Each person generates their own map even if they are on the same server, so you can use that to your advantage or against you (it’s a non-Eucladian idea), and it doesn’t have visual bugs or people going through walls.
  • Ambient and lighting.
  • Without sound (for now, I have to get the sounds).

This clip is prior to the ambient and texture adjustments:

Some images post ambient and texture adjustments:




This one is about the “Special Chunks”, it’s just a big part (for now) to see how the generation generates it:

And this is the comparative about low graphics and high graphics:



UPDATE 02/12/25:

  • Fixed the bug where you spawn below the generation.
  • Fixed the bug where you spawn IN a wall. Now, you will spawn allways on a chunk called “SpawnChunk”.
  • More optimization.
  • Added more chunks (I will upload them soon):
    • 2 special chunks (pitfalls and ████████ ).
    • 2 normal biome chunks.
    • 4 pillars biome chunks.
      Pitfalls:

UPDATE 03/12/25:

  • Fixed some chunk positions.
  • Added visual effects like VHS effect or camera effects.
    Video:

    (the camera zoom will be improved and reduced)
    (I added more velocity when you run, and now the stamina bar is yellow)

UPDATE 05/12/2025

  • Balanced some spawn probabilities of some chunks.
  • Created the Darkness Biome, It will have the same chunks as the default biome but without lights. Sanity will decrease faster there.
  • PD: I have to change some ilumination and environment for this new biome, like making the particles more visible

UPDATE 17/12/25

  • Now the floor has no changes in texture due to the rotation.
  • The issue where special chunks were not spawning correctly has been fixed.
  • The bug that generated empty chunks no longer occurs.
  • I will do today a texture and lighting rework for greater realism (we will use textures instead of materials, it will decrease a bit the performance but it’s for greater realism).
  • DarknessBiome improved.

UPDATE 22/01/2026

It’s been just over a month since the last update (I was a bit disconnected over Christmas), but I’ve been reworking the lighting and the yellow color palette of level 0, as well as adding an extra chunk inspired by the original level 0 image (with a lower rate of spawn) and adding chunks to the “Pillars Biome”.

I just need to add more detail to the walls (like the brown lines, electrical outlets, etc.) and the special chunks, and level 0 will be finished, but I’d like to find more realistic textures for the level (if anyone knows where to get them, please let me know).
The level will probably be finished before the end of this week.

UI improvements are still pending.
Darkness Biome still on progress (WIP) (temporary flashlight).
The last image is the inspired chunk by the original level 0 image.







Some new Pillars Chunks:



Screenshot taken from the Roblox Studio workspace itself; they think it looks better in-game when they’re sandwiched between them:

UPDATE 23/01/2026

Today I uploaded my first video about my game! Being from generation 0, it’s an 8-minute showcase (gameplay) showing the 3 currently available biomes.

I’ve also started working on the red rooms. Keep in mind that I only had 10 minutes to change the lighting and colors of level 0, so it’s still in development (I can’t continue until Monday/Tuesday).



UPDATE 28/01/2026

Another video on the channel! This time, about the Red Rooms with the lights rework.
Ngl I shit my pants while recording this



It’s still in development! The code is finished and the chunks very soon.
Months of development work is really being invested here, and I think that from now on development will go faster since this consumed most of my time.

If you want to be on de discord just enter this link: Project FrontRooms
You must verify if you want to see the sneak peeks!
Btw, the dev forms are open too!

Link for the testing place (not updated): generation per chunks testing - Roblox
(You can support the game buying some support gamepasses)

Sorry if there are any formatting errors or bad English, it’s not my first language (I’m Spanish) and this is my first post. Thanks!

I will be updating my sneak peeks and advancements of the game here btw.
Open to any suggestions or questions.

Thanks your for your time =)

14 Likes

Funny, I did the same.

Tips:
Dont destroy chunks, save them in replicated storage
Generate om the server and render on the client

Questions:
How did you do biomes to precise?

1 Like

Oh, I didn’t explain it well. When I say they are destroyed, I mean they are removed as you progress, but they are saved in case you return and can generate them in the same place, the same chunk.
And yeah, it does that.

Answer of the question:
I created a maximum and minimum size for each biome, and I made it generate with a continuity system, so there aren’t any loose chunks of one biome in a different one. I also included a probability system.

1 Like

New update of the system guys! Check “Update 02/12/25”.

This is interesting. Nice job on it! This is cool and great!

1 Like

Thanks you! I’m just updating this dev post, let me upload a vid
Edit: I just updated it right now

I updated it rn! New biome lol

tbh I’m not a huge fan of backroom games but I have some advice for you since I’m known for making horror games


UI

Even if you add black frames around the screen to make it look like the player is holding a camera and recording it will make the perspective more terrifying for example

* With black frames


* Without black frames


If you want players to feel more tension in your game, this is the best option. It limits what they can see, showing only what you want them to see, which naturally increases the suspense. This works especially well if the rest of your game has a calm atmosphere


Sounds

In horror games, a lot of developers rely on jumpscares, but I try to avoid that since it’s predictable. If you want your game to stand out, it’s better to create tension in other ways. I focus on keeping players on edge, so they never know when a chase or scare might happen. Most of the time, I use sounds to build suspense and make the player feel genuinely tense

You don’t always have to rely on scream sounds or jumpscares. For example, if a player does something wrong or triggers an event, you don’t need a jumpscare to let them know they can learn from the consequences, like opening a door that lets the monster in. Some of the best horror games outside Roblox use subtle cues, like simple hints or audio signals, to make players feel like something is coming without showing it directly. It’s all about building tension naturally


It’s important | Sounds

not to make all the sounds too loud or it’ll kill the volume balance For example don’t make the player’s footsteps super loud because if the game already has a lot of sounds everything will become chaotic a good approach is setting volumes like

  • Player footsteps: 0.1

  • Monster sounds: 0.7

This way, players can hear important cues without the footsteps drowning everything out. You don’t want all sounds at the same level volume or the monster might go unnoticed because of loud player other not important noises

This is my personal opinion!

3 Likes

Wao tysm for the advices!
The UI effects aren’t finished yet, but I was planning to add the lines you mentioned to partially obstruct the view. I was also going to add sound triggers to create more suspense and a creepy atmosphere. And if you notice the footsteps are very loud in the video, it’s because I have it set up like that for testing, but it will be lowered in the future. And yes, I’m not a big fan of jumpscares either. This game is NOT trying to be like other backroom games, which are all about monster chases and jumpscares. We want to create an atmosphere that is truly scary, that gives you a bad feeling, and that is faithful to the wiki. For example, in level 0 there are actually no entities or players, and sometimes solitude is scarier than company. The only jumpscares will be the hallucinations when your sanity is low, and when an entity kills you (which will NOT be an instant kill)
Tysm again!
Btw, the first sound is used on the most famous and realistic minecraft mod of backrooms

2 Likes

Btw, as I mentioned, I use a biome generation system, and I want one of the biomes to be dark. How would you adapt that idea? I think the best approach would be to add more darkness rather than simply leaving it without lights, as well as adding more unsettling sounds that make sanity drop faster

2 Likes

If you want a biome to be darker, you don’t need to remove the lights.
Just add a ColorCorrection and slightly lower the Brightness and Contrast (around -0.05 works well). It keeps everything visible but still gives a darker, horror-style tone.

For local lights like PointLight, you can just reduce their Brightness when the player enters that biome. It’s a simple way to make the area feel darker without breaking the overall lighting.


I Build this so i can show you how to make areas darkers







PointLight is Important

4 Likes

Looks great! Similar implementation to what I have done for procedural terrain, although this ended up being much more laggy than I am sure this is.

Might I ask how you are able to get client sided maps to be different without people phasing through walls? Can you see other players? Or am I misunderstanding.

2 Likes

Okay, I have to admit that the touch you’ve added with what you’re saying is incredible.
I’m going to do what you say, thank you so much, really, and your dedication is greatly appreciated considering that is my first project.

Btw, seeing as you’re quite experienced with building, do you know if it’s better to use mesh textures like children, or the textures that can be added? I ask because of lag and because it’s difficult to find realistic textures for backroom walls, at least for level 0

1 Like

Yeah you can see players, but because it’s not client sided.
What the generation does is create chunks from chunks I’ve already made, and place them within a 5-block radius around you, making them visible to other players. Additionally, to prevent a chunk from being created where one already exists, there’s a system that checks if that chunk is empty or not.
Furthermore, the system ensures that as you progress, chunks are deleted and stored in case you return and want to place the same one. Finally, to add more variety, chunks are placed in a random rotation every 90°, using a probability and biome system
1000 lines of code rn btw

New update uploaded! Just some fixes and a improvement on the lighting of the Darkness Biome.
Btw I just found a old prototype of the generation.
I did this prototype in august, but I started the current one on september.
Some photos of the old prototype to show you the big improvement


1 Like

New update!

It took me a little while because of Christmas and because I’ve been researching other types of generation systems for other levels, like level 3, level 6, level 10, etc.

I’ll create a post soon which I’ll link to at the end of the main message
Thanks for your support!

Btw, this is the list of procedural and not procedural levels:
(Maybe I do the level ! and !-! procedural but finite)

First video on the official YouTube channel! A showcase gameplay:

May I ask what algorithm you used to generate the maze like structure, as normal maze algortithm only does finite area (no chunk support) and my attempt using fully randomized cells with each cells being specific "walls rotation and configuration causes bounded Ie locked off area)

1 Like

Hey! Good question. The generation I use is a chunk-based procedural generation system with weighted selection, circular biome regions, and dynamic streaming with caching, featuring:

  • Weighted random selection, plus random chunk rotation by 90 degrees.

  • Radial biome regions for continuity, with biome bands.

  • Deterministic persistence with seeding.

  • Dynamic streaming with caching and LRU (Local Resource Units).

  • Multi-chunk placement with spatial locking.

  • Probability support for each chunk and biome.

The world has an invisible 100x100 stud grid, which is the size of each normal chunk. Special chunks must have increments of 100, i.e., 200x200, 300x300, and so on, and must always be square.

Algorithms used:

Grid-Based Chunk Generation, which performs the following pattern:

  • Spatial partitioning.
  • Tile/chunk-based world generation.

Chunk Streaming by Radius (Player-Centric Streaming):

  • Generates only chunks within a square radius.
  • Destroys chunks outside the radius.
  • Maintains a maximum number of active chunks at any given time (since chunks are “destroyed,” they no longer count as active).

Seeded RNG:

  • Random generation of a seed.

Weighted Random Selection:

  • Probability system for the appearance of chunks and special chunks.

Circle Biome Bands (I don’t use Perlin Noise):

  • Region-based biome generation with distance-based blending.
  • Random centers.
  • Minimum and maximum radii.
  • Biomes as circular rings.
  • Smooth bleeding between biomes (like a transition).

Biome Blending:

  • Facilitates smooth blending between languages; sets the size of the transition.

Multi-Chunk Occupancy:

  • Used for special chunks: a single model occupies multiple chunks.
  • All point to the same object.
  • Locks positions.
  • Prevents overlaps.
  • Spatial locking / footprint-based placement.

LRU Cache + Garbage Collection:

  • Sorts by least used.
  • Removes the oldest chunks.
  • Preserves large chunks.

Sorry if I took a while to reply, I had to reread the code to explain everything properly.
I hope this helps you in your attempts!

1 Like

Btw i added the Red Rooms in the last update, still in progress!