Hey folks and welcome to the inaugural developer blog post from Rec Room! The dev team wanted the opportunity to talk about some of the technical and design challenges we face. We’ve heard that many of you are interested in having more info about the Rec Room development process and this is our chance to give you a peak behind the curtain. We’re going to be putting these out about once a month, in parallel with feature releases.
And now without further ado, the first of hopefully many topics, Room Playlists!
We recently built a system for Room Playlists, which act as a grouping for rooms. Much like a music playlist allows you to listen to a group of songs without forcing you to pick each individual song, Room Playlists support easily transitioning between rooms without leaving the context of a playlist.
Question - isn’t ^Paintball, as we know it already a playlist? It feels that way because you auto-transition at the end of games, and, in fact, our mental model of ^Paintball is that it behaves like a playlist. But under the hood ^Paintball is just a room where each map is its own subroom -- this is an important distinction for a few reasons. First, all maps in ^Paintball must be owned by Coach (because they are part of a room owned by Coach). Second, due to the way RRO rooms are managed, we can only update ^Paintball by shipping a client update. And finally, the auto-transition and voting behavior is a special case for our rooms, rather than a general system creators can hook into.
With the introduction of playlist support, we have the ability to group separate rooms (not just subrooms) from different creators under a single entry point for players -- this could be via a button in the watch or through a door, such as the one in the ^StuntRunner lobby. And we generalized our voting logic to be able to work with playlists.
We think Room Playlists are an important addition to the Rec Room ecosystem for both players and creators:
Players get an easy way to consistently find a collection of great community content.
Players have a higher chance to find full rooms for community games - matchmaking works at a playlist level to try to aggregate users together.
Creators have a new avenue for being featured -- being included in a popular playlist will help more users find your awesome maps.
Our first use of Room Playlists is a hand-curated list of community Stunt Runner rooms picked by our lead designer, RadiantBlur. These awesome community rooms are now available via the previously locked Community door in the Stunt Runner lobby or via your watch under StuntRunnerCommunity. We have plans to do a lot more with playlists in the future, but before we talk about that, let’s look at what we wanted to accomplish with playlists...
Goals of the Feature
At Rec Room, after we have an idea for a feature but before we start building, we like to make an explicit list of goals. Goals focus our work and help us prioritize the important bits. So to understand our implementation of Room Playlists, it’s helpful to look at the goals we used. Here’s a sampling of the goals we started with:
Playlists can seamlessly slot into games you already know and love: one day a door leads to the existing rotation of RRO maps. The next day, it could lead to a rotation of Community-made maps.
When entering a room as part of a playlist, clearly message the room name and the creator’s name in a consistent way. We want playlists to shine a light on creators.
Make sure new or casual players know when they’re in a playlist so they can differentiate between community maps and Rec Room Originals.
All playlists have a single, non-transferable owner who made the playlist. Rec Room Original Community Playlists will be made by Coach.
Playlists can include rooms from any number of different creators.
Playlists can have rooms added, removed, or shuffled at any time without a client update.
Playlists show up in the room browser sorted by hot score, just like the rooms they appear alongside.
Join-in-progress support is specified per room, not at the playlist level.
Users can access playlists via doors in the world or buttons in the watch.
A playlist button in the watch is visually distinct from a room button. Players should be able to understand at a glance whether a watch button links to a room or to a playlist.
Player presence indicates if a player is in a playlist.
Playlists are resilient to null entries, removed entries, etc. Worst case, players bounce to their dorm rooms with an error message.
There’s a lot packed into this list! These goals formed the core of what we felt Room Playlists needed to do. During brainstorming, we also had some “nice to have” features we wanted but felt were not ship blockers. Typically we refer to these as “stretch features” -- they may get cut, but we’re going to do our best to fit them in if there’s time.
Here are the important stretch features we wanted (and in this case, implemented) for playlists:
Voting. We wanted to promote the special case voting logic in ^Paintball to support Room Playlists. One wrinkle that playlists introduce to voting is that not everyone in a room is necessarily in the same playlist. Players from different playlists can be matched into the same room instance. How should voting be handled in this case? We decided that a separate vote would occur for each group of players, based on the playlist they are in.
Skipping. Similar to music playlists, we wanted a “Next” button in the watch so that players can “skip” a room. This let’s people easily skip rooms they might not want to play. It’s also a critical feature if we want to include non-game rooms in playlists (which we do!) -- these rooms won’t have an “end of game” moment where we can automatically transition you. The skip button gives players a way to continue through playlists containing non-game rooms (eg story rooms, endless pvp rooms, art rooms, etc).
Touring. While in a playlist, players transition from one room to the next, together as a unit, much like in ^Paintball now. For our first playlist, we wanted this to be as smooth as possible. This means it’s important that StuntRunnerCommunity maps we choose to feature support the same number of players. We opted not to impose a requirement on the playlist system itself and instead are going to handle this via curation - we will only choose rooms if they support four players. That’s the right outcome for a Stunt Runner playlist. By solving this via curation and leaving the system more flexible, we’ll have the option to make more varied playlists going forward.
The Future
There are a number of things we hope to use playlists for in the future. One of the short term plans is converting Paintball into a playlist proper. We’ve always thought of ^Paintball as a playlist internally, and now we have the tools to support this properly. In addition to a more robust foundation, converting ^Paintball into a playlist would give us the opportunity to experiment with showcasing amazing creator maps within the Paintball rotation. We think this will benefit Paintball regulars by adding excellent, new maps to the mix, and benefit creators by funneling lots of users to their creations. Stay tuned for more details Soon™ [|=)]
Longer term, we’ll experiment with playlists outside of Paintball and Stunt Runner. If Paintball is our Pop and Stunt Runner is our Electronic playlists, we could depart into all kinds of other genres to highlight any number of styles of rooms. Doing a themed playlist around outstanding escape rooms or a specific style aesthetic of rooms - GoldenEye! Roaring 20s! Cyberpunk! There’s a lot of potential here.
And, of course, we want to eventually release playlists as a tool for creators. We need to iron out the kinks first, but our hope is that creators can make and share their own playlists. We really believe Playlists open up a lot of doors (joke intended!).
That wraps things up for our first dev blog. Let us know what you think and what future topics you’d most like to hear about in the comments below!