
Backrooms: Origins
Case StudyI’ve coordinated a small team of mesh, VFX, and image artists regarding every development done in Roblox Studio, while being responsible for all of the game scripting and DevOps.
Backrooms: Origins has been made in two editions — multiplayer, and story (campaign) mode. Right now, only a demo of the story mode is available.
Below, some of the core features I’ve programmed will be outlined.
Procedurally generating infinite worlds
Backrooms: Origins features a custom made, procedural infinite world generator. The world keeps generating until infinite distance (*tested up to 1 million studs).
To support fast load times, the world only renders chunks in a sphere around the player. To keep FPS high, these are dynamically unloaded when not in view. Furthermore, these chunks are split into 12 by 12 stud tiles.
The features for the map generator include:
- Modularity: Multiple generation types are supported, and the map system can choose which type of level to generate.
- Performance: As the map generates on server startup — and thus right when players join — the map should generate in a reasonable amount of time.
- Determinism: If the same map seed is provided, the map generates exactly the same, even if players walk around the world differently.
- Monuments: The generator spawns different ‘monuments’ around the world — larger, multi-chunk preset structures (most of which are also procedurally generated). These shape the world around them, and always have corridors entering them.
Fully interactive operating system
“Sunshine OS” is a core part of Backrooms: Origins, representing both the lobby, but also an important gameplay element to convey the story.
It is an interface made in around 6,000 lines of roblox-ts and Fusion code, with the design inspired by Windows 98, SerenityOS, and THE_ABYSS_HAS_WALLS, with features such as:
- Minimize, maximize, drag, reorder, resize windows
- File explorer
- Draggable & interactive desktop icons
- Arcade games such as Snake and Minesweeper
- Media viewer (images and videos)
- Start menu
- Taskbar
- Messenger client
- Email client
Custom video player
Backrooms: Origins features a custom made video player. It uses:
-
No
EditableImage
-
No
VideoFrame
As they weren’t publicly usable yet.
Instead, videos are played by manipulating hundreds of Frame
instances every second. To achieve this, a frame by frame playback algorithm is employed.
To store video content efficiently, while respecting players’ bandwidth, I’ve made a custom video format called SRVF, that stores frame by frame diffs and metadata.
SRVF files are generated by using a Node-based CLI that uses ffmpeg to extract frame data.
Furthermore, the video files are compressed using the DEFLATE algorithm and are serialized to a Studio compatible format by getting split up into multiple ModuleScript
s. These are generated at build time then packaged into a rbxm
using a Lune script.
Custom character controller and camera
Backrooms: Origins features a custom made character controller based on physics parts. To complement it, custom camera code is employed, compatible with all input methods such as touch and controller.
Dynamic entities and world interactions
Multiple ‘entities’ (monsters) are implemented in the game, featuring their own pathfinding, animations, noises, and jumpscares.
The game features scannable objects for objective completion, and various easter eggs.
Matchmaking
The multiplayer edition of Backrooms: Origins features a party based matchmaking system that uses MemoryStoreService
, wherein multiple players are able to queue up and start a game, following the host’s configuration for the match.
An auto-rejoin system is also included — if a player gets disconnected during a match, and they rejoin the main game, they are asked if they’d like to rejoin the in-progress match.
Contact
Have a project in mind? Let‘s connect:
Discord: tacheometrist
Email: [email protected]
Talent Hub: tacheometrist
GitHub: tacheometry
