Porting a Roblox Game to Steam with Unity: the Case of "Find the Cats"
Find the Cats is a new game that was released just a few days ago on Steam by a game developer that we happen to know personally, Bemmu. Find the Cats is a cute little title aimed at kids, challenging them to find all the cats hiding across different levels.
This is Bemmu’s first Steam game, released on day 1 with clients for Windows, Mac and Linux. It was however not his first game. Find the Cats was originally a very popular game he had created on Roblox - so popular that he had created a series of cat-themed games on Roblox following its initial success. In case you have no idea what Roblox is about, imagine an online platform design to create a play games, sandbox-style, with built-in multiplayer support. It’s quite popular these days among kids, probably a close second after the other contender that’s Minecraft.
So, following the initial success on Roblox, Bemmu is trying to see if the game would find a market on Steam as well. On top of the motivations leading to this experiment, we were especially interested to know about how one goes about writing a port from a Roblox game to a Unity one, and how the Steam publishing process actually works:
Boiling Steam: Find the cats was initially a game you created in Roblox. Why did you decide to port it to Steam?
Bemmu: From the start I knew my chances of doing well on Steam are very low. So why do it?
Before deciding to release a game on Steam, I had been making games on Roblox for two years. In total I released six games on Roblox, almost all of which were cat-related games. Besides genuinely liking cats, concentrating on one subject makes cross-promotion easier. Every new cat game I create is found by new players who weren’t aware of my other games, who then often end up playing those as well.
I figured that as an experiment, I would port one of my older evergreen games “Find the Cats” from Roblox to Steam. Find the Cats is a 3D hidden object game where you walk around several areas and need to spot all the cats scattered in them.
My reasoning for doing the port was that if I spend 3 months and it succeeds, then I unlock the ability to port my other games there as well. And if it fails, well then I lost some time, but I can just shift my focus back to Roblox.
Low chance of success, but good expected value.
Boiling Steam: What was involved in converting the game to Steam and what tools did you end up choosing?
Bemmu: To actually do the port I picked the usual tools: Unity, Blender, Photopea, and Audacity.
In Roblox you create your games in an IDE called Roblox Studio, within which you can browse and place assets from their asset library (or import your own), write code in Lua, and finally also publish your game extremely easily to Roblox.
While I keep saying I “ported” the game, it was closer to a complete recreation, because basically everything is different from Roblox Studio.
Boiling Steam: How was your experience with Unity? What did you like and did not like?
Bemmu: My total experience with Unity was from participating in the 48h gamedev contest Ludum Dare with three Unity games. So I didn’t know much going in, but knew that I could probably figure things out as I went along.
There are large differences between Unity and Roblox Studio. It feels unfair (and unsafe?) to criticize Unity by saying that something is “not possible” or “not as easy” as in Roblox Studio, as there is a huge Unity plugin community that has probably made anything possible and easy if you just know about it. But here is my inexperienced take on the differences.
Instead of writing code in Lua, in Unity one uses C#. This wasn’t an issue, as Find the Cats is the simplest game to port out the ones I’ve released, so the port ended up only having about 3k lines of C# code. The Lua code is over 10kloc, but most of it is multiplayer-specific (the Unity version is single player). I suspect for the parts that are the same, the amount of code would be quite similar.
Roblox Studio has a rather nice terrain system, but it is voxel-based and not heightmap-based as it is in Unity. Voxel-based terrain can have tunnels, which you can’t do with a heightmap. Since my other games don’t use terrain, it didn’t make sense to get fancy as any automation wouldn’t be of use in the future, so I decided to just recreate the terrain by hand. For the ground and hills the heightmap was enough, but to recreate the tunnels I spent many hours hand-placing rocks and cave parts to make the tunnels with geometry instead.
In Roblox, players participate in games with their own avatars, so you don’t need to think about what the player looks like. Players buy whatever clothes they like in the Roblox avatar shop (my own outfit cost more than any real-life outfit I have). In Unity the creator of a game needs to make this choice, and I ended up buying a character model to represent the player, and used Blender to animate it.
In Roblox you also don’t have to worry about player movement. Things like having the character walk with WASD, jump, climb ladders, or swim just work. In Unity while I suppose I could have used a readymade character controller, I wanted to satisfy my curiosity about how that works. That turned out to be mostly some raycasts and simple 3D math. The hardest parts were supporting ladders, mouse sensitivity issues with mouselook, and getting swimming to work properly (which I still haven’t gotten on par with Roblox).
The most amazing part of Roblox Studio is how it gives you multiplayer for free. Other players can join the games you make by default. Roblox even automatically spawns new servers when a game gets more popular, and multiplayer is how everyone experiences every game. You can even write and test server-side scripts within the same IDE. For the Unity version, multiplayer seemed out of scope for this porting experiment, since adding it seemed like it could easily be a months-long rabbit hole, all for a game which doesn’t even have any multiplayer elements besides just hanging out.
Boiling Steam: Are there any gotchas based on your experience with Unity you’d like to share with people interested in game dev?
Bemmu: Nothing major came up. That’s why I picked Unity: it’s the boring safe choice, as so many developers have already had to do whatever it is you are doing, and it’s easy to find tons of forum posts and even YouTube tutorials to solve almost any problem.
Boiling Steam: You initially planned for your game to be mostly working with keyboard and mouse. You have later implemented some controller support: how did you evaluate what was needed to do to make things work well with a controller?
Bemmu: I was under the mistaken impression that the PC Master Race runs entirely on WASD, but I was informed by a reporter from a famous Linux gaming website (the name had something to do with steaming, or was it boiling) that in fact some heretics use a controller with their PC.
I went on Amazon to immediately buy a controller to add support for one. Then I found a PS3 controller in our living room. I went on Amazon to immediately cancel my order.
Actually adding the support was pretty easy, as the Unity input system allows you to have logical actions like jumping and bind them to several control schemes without large code changes. Making sure the menus also work with the controller was a bit more work. Gameplay required more changes as it’s a point-and-click game.
With a controller that doesn’t work, so an alternative way to collect cats by standing next to them needed to be added. “Standing next to” is actually pretty vague. What if the cat is peeking from behind a fence or from a ceiling for example? You can’t stand in a fence or in the ceiling, so I had to manually define areas to define what “standing next to” means. And what if you stand next to more than one cat?
Boiling Steam: You produced a Linux port as well for the game, while you don’t run Linux on your own. Can you describe how much work was involved for that?
Bemmu: Oh no, I’m an avid Ubuntu user. So avid that I’m not sure I still remember the password for the Ubuntu box I set up last year to experiment with Tensorflow… Adding Linux support was no work at all really, just selecting a different build target in Unity.
Boiling Steam: Based on the feedback you received on the Linux version did you find the export function working more or less as expected?
Bemmu: It seems to be working as it should.
Boiling Steam: What is the process like to get a game published on Steam? Was there anything confusing?
Bemmu: Here’s how to publish a game on Roblox:
In the IDE, click “publish” and then enter a name for your game and click “create”. To make it public to everyone, you do also have to choose one more radio button in another menu. Congratulations, your game is now available for anyone to play on PC, Mac, iOS, Android, and Xbox One.
Here’s how to publish a game on Steam:
Pay a $100 “steam direct fee” to create a game. Create a “depot” for each platform you want to support, and a “package” which contains said depots. Write a description, do a mature content survey, add tags, and create about a dozen graphical assets for your game page (such as a separate logo and a steam store background image so that if a shopper visiting your steam store page happens to resize the page, the logo moves separate from the background).
Oh you also can’t release your game without a trailer, so fire up your video editor (I used ScreenFlow). To be fair, I’ve made trailers for all of my Roblox games as well, but it isn’t a requirement.
Install the Steamworks SDK on your computer to get a command-line tool to upload your project. Learn how to write configuration files for said tool so it knows which files go into what depot. Configure launch options for your project for each platform you want to support. Add the Steamworks API to your Unity project.
Create a build script in Unity. Each time you want to publish a change, fire up the script and browse Reddit until it is finished. If building for macOS, also ask it to make an XCode project out of the game, then open said project, change several build settings, then build and browse Reddit. Once the build is finished, you are not done, because Apple wants to check that your build does not contain malware. To do that, also use XCode to upload the build to Apple to be notarized. This takes about an hour. It’s optional, but without it people with newer versions of macOS won’t be able to open the game, so it isn’t optional.
When you finally have all the builds for all the platforms, then use the command-line tool to upload your game. Browse to the steamworks website to move the uploaded build to the correct branch. Choose launch date, pricing, etc. and click on a button to ask Valve to review the build and your store page. React to any of the friendly (this isn’t sarcasm, they really are friendly and helpful) and actionable feedback to make changes to your game and/or store presence before reattempting to pass review. Pass review.
Click on a button to launch your game. Congratulations, your game is now available to buy on Steam!
Boiling Steam: How fast was the process between wanting to publish on Steam and getting it done?
Bemmu: I started to work on the port on May 12th, and released it on Steam on July 29th, so that’s 79 calendar days.
As for the original Roblox game it’s harder to say how long it took to make, but I’d estimate about 4-5 months. So the port was about half the effort of the original. While it was a near complete recreation of the game, I saved time from not needing to decide how the game should work, or which cats or assets to place where.
Boiling Steam: How are you planning to promote the presence of your game on Steam?
Bemmu: On Roblox is that I never really needed to promote my games. For the first one I bought some ads, then after a few weeks the Roblox algorithm discovered the game and started showing it in recommendations. After adding more games, I could then also get players by cross-promoting between games.
I think the strength of the Steam version is that there are relatively few nonviolent games easy games for kids there. Even while the game was only wishlistable, I saw that people were discovering the game without promotion, probably by searching for things like “cats” or “kid-friendly”.
To help things get along, I might consider doing some blogging, as I do enjoy writing, but the world is full of people trying to promote their game, so I don’t think there is anything magical I can do besides responding to player feedback and removing any annoyances that prevent people from enjoying the game.
Boiling Steam: Overall, if you were to account for all the time you spent on the Steam port, including planning and administrative processes, how many hours did you end up spending?
Bemmu: I kept careful track of hours worked, which came to 217 hours total. I try to put in 3 focused hours (=no “quick checks” of social media while on task) of work every day to avoid burning out, and to not introduce problems from being tired.
Boiling Steam: What kind of objectives did you have when publishing the game on Steam? Financial ones or more qualitative ones? Do you plan to keep releasing titles on Steam if things go well?
Bemmu: I wanted to see whether I could make a Steam game, and since I was able to launch and learned how to port Roblox games there, it’s already a limited success. However I do wish it would also be a meaningful addition to the Roblox version sales, because that would justify porting more games to Steam. If not, then I’ll need to turn my focus back fully on Roblox. I’m actually somewhat OK with it failing too, because making more new games on Roblox is just more fun than recreating ones I’ve already made in the past.
Boiling Steam: About the addidtion of ‘tags’ to the game - we were under the impression that game tags were added by users. So is this not really the case?
Bemmu: I also thought tags are added by users only, but it seems the system is that devs add tags to start things off, and then users can suggest more.
Boiling Steam: Since the success of Stray seems to have ignited the ‘cat-related’ games on Steam, do you intend to do anything in the same fashion?
Bemmu: Stray was announced on June 2020, and I released Find the Cats on Roblox the same month, so it was not a conscious choice to ride the Stray wave. If Find the Cats does decent on Steam, then I would port my most popular Roblox game called Bad Cat next. It’s a pure destruction game where you play as a cat whose owner has gone away, and in their absence you break out from the house and proceed to smash everything, gradually getting stronger Katamari Damacy-style, eventually smashing cars, people, and water towers.
Boiling Steam: Thank you for your time and your availability to answer our questions! All the best for the Steam version!
You can check out Find the Cats on the Steam store.