Devlog: THE DREAM SURVEY
While this game released a couple years ago, and only recently concluded summer of 2025, I'm going to go into depth into how it was created and how some things work in depth.
This is the earliest screenshot I have of the game during early development. By this point I already made a system for procedurally generating rooms similar to the linear map generation of DOORS on Roblox. The goal at this early stage was to recreate a similar exploration style to LSD Dream Emulator, because I watched the video Games that Aren't Games by Jacob Geller. I thought the style was so cool, so I was experimenting with creating something similar.
The idea was to make each "world" about 5-10 rooms, and just fill them to the brim with random nonsense, like shadow figure NPCs that say random gibberish. But eventually I wanted to add some story to it, so I made the point and click style main menu with the super long puzzle. And this is the earliest gameplay of the game once I added furniture:
Except what they don't tell you about randomly generating rooms with turns, changes in elevation, and no set limits is that it can and WILL circle back in on itself and completely block off the path the player is supposed to go. This was such a recurring issue in the early game that I spent about 2 weeks on JUST trying to fix it. The way I fixed it was literally just adding 30 degree turns instead of 90 degree turns, and limiting the amount of turns that can be spawned per room generated. A left turn is more likely to generate the next 3 rooms after a right turn, so the path is always trying to correct itself back into going straight.
The way the room generation works is pretty simple. You create a bunch of room models with parts where you want furniture to generate. And the entrance to the room you put a part that takes up the entire doorway and make it the Primary Part of the room's model, do the same for the exit doorway. Then just have an interative loop running for the amount of rooms you want to generate, make a function that you pass the previous room into. In that function select a random room from your list of rooms (simplest way is RoomFolder[math.random(#RoomFolder)]) use PivotTo() to pivot the NEW room you selected to the EXIT part of the previous room. For your new room do the same with the furniture.
I deleted a lot of the bloat from the code screenshots to keep it easy to understand, not meant for you to copy the code exactly. But using the method mentioned previously, you can add as much functionality as you need. In some of the later levels I made the furniture function spawn in billboards, lasers, enemies, and even trains. The only downsides are high memory with creating large levels, and high lag at the beginning of the level as the map loads in. Two things that can be fixed with adding a radius. For example; DOORS gets around this by unloading the rooms behind you, and creating new rooms as you move, so nothing is kept in memory for too long.
After the rooms were done, I added NPCs. They say random nonsense by just picking random words from a table of words I hand wrote into a bunch of module scripts I got from an online dictionary (it took several hours). The main script is pretty simple tbh. It just picks a random word type that isn't the same as the last word type, then returns it to be added to a sentence (just iterating Sentence..Word for every word generated).
By this point all of my core game mechanics were there, so I focused on trying to add things I found fun, like an easter egg and a point and click style main menu with a puzzle you have to solve to get into the game. Along with the story I mentioned earlier.
The combat in the Dream Survey is actually a script taken from another project I was working on at the time. It was going to be a detective movement shooter type game where you fight evil spirits on a train stuck in limbo. Basically a contract killer cleaning up the train of demons so the spirits on board can safely get o the afterlife. The knife and gun mechanics are basically a one for one.
Tbh I made the Dream Survey because I wanted to see my friends playing it, which is still true today. Making games is fun so I'm probably going to keep doing it in the future.