Whether you’re building an FPS multiplayer experience, an open-world RPG, or an adventure puzzle game, one thing is certain: You want to create dynamic and engaging experiences for your players. While specific platforms have traditionally been associated with different types of gaming, such as more casual games for mobile or FPS games on PC, developers no longer need to limit themselves. Today’s gaming experiences successfully extend across multiple platforms, which greatly expands audience reach.
Of course, anything worth pursuing comes with its fair share of obstacles. This includes developing for multiple platforms. The process of scaling and porting games can be taxing on teams, no matter their size. But as many developers who have been through it will tell you, the reward is well worth the challenge. There are plenty of business benefits that come with getting your game onto increasingly popular consoles like Nintendo Switch, with more than 78 million consoles sold worldwide.
Plus, there are always helping hands along the way. Once you know where to look, you can find thousands of learning resources, most of them completely free and available to anyone who is willing to take the time to learn.
We recently had the honor of speaking with Wlad Marhulets, the creator of the award-winning DARQ, a horror action-adventure puzzle game that follows the story of Lloyd – a boy who finds himself in the middle of a lucid nightmare. Marhulets is a multi-talented, solo developer who, over the course of five years, has been able to bring his first title to most major platforms: PC, Xbox One, Xbox Series X, PlayStation 4, PlayStation 5, and most recently, Nintendo Switch. His journey is an arduous one, but through ongoing perseverance, optimism, and steadfast support, Marhulets can now attest to the satisfaction and triumph of sharing his art with so many people all over the world, no matter their hardware.
His story begins with a simple download.
Read on to discover what the developer of DARQ has to say about his experience in scaling for multiple platforms.
I got into game development in late 2015, fresh out of college, in the early stages of my film composer career. Once, I had a month off in between film gigs, so I decided to try a new hobby. Without knowing anything about making games, I downloaded Unity and instantly fell in love with game development. A month later, I had a little prototype, which barely resembled what DARQ looks like now. A friend of mine encouraged me to put together a trailer and upload it to Steam Greenlight. I didn’t expect much, but when DARQ hit TOP 10 of the most upvoted titles on Greenlight, I decided to turn my hobby into a career – or at least, give it a try. I did not plan for console releases at the time, and didn’t know if I could even make a game for any platform, to begin with. I had to learn everything from scratch, and I loved every minute of it.
The game took over three and a half years to make. Although multiple publishers reached out to me during that time, none seemed like the right fit. I decided to self-publish DARQ in 2019 with the PC audience in mind. It wasn’t until 2020 that I met the right publishing partner to bring DARQ to consoles. Now, in addition to PC, DARQ is available on Nintendo Switch, PS5, PS4, Xbox Series X|S and Xbox One. Physical releases are coming soon, too.
Around the time I got into game development, I was writing music for an indie game called A Cat’s Manor and got to witness its behind-the-scenes development. It amazed me that a high-quality game like that could be developed entirely solo. If I remember correctly, that’s how I found out about Unity. As I started working on DARQ, I appreciated the well-written programming tutorials on the official Unity website and the humongous community of friendly developers available to answer questions if needed. I’m now working on my second game with a pretty large team, and needless to say, we’re using Unity. I couldn’t be more enthusiastic about the engine – it literally changed my life.
Technical challenges aside, it’s important to emphasize that we were working remotely during a global pandemic across three different time zones. With teams in Poland, Finland and California, we had to find a way to communicate effectively. We utilized Slack to communicate via chat and keep everyone updated on the game’s progress.
One of the challenges we had to face was making sure that the game looked consistent across all platforms, as all of them handle rendering a bit differently. We ended up manually adjusting brightness, contrast, saturation, tint, and in some cases, lighting. Also, we encountered a few rendering glitches that had to do with floating-point precision. For example, having one quad placed on top of another with a small offset would render correctly on PC, but cause flickering on consoles. In some cases, we had to slightly readjust object positions to solve this issue.
Switch was the most requested platform among DARQ fans, so it was an easy decision to make. Also, I must say, Switch is my console of choice. Having DARQ show up in my Switch library is a dream come true.
DARQ relies on the use of real-time volumetric lighting, rich sound design that utilizes a myriad of FMOD audio events, inverse kinematics, and large prefabs, which take time to load. While these systems might not cause noticeable performance issues on a gaming PC, we had to be creative when coming up with the optimization solutions to make DARQ run smoothly on Nintendo Switch. The main challenge for the Switch port was to achieve a stable framerate (30+ frames per second) throughout the game without making too many noticeable sacrifices. I believe we spent the most time optimizing volumetric lighting and shadow-casters, as they were especially “expensive.” We also encountered a number of audio glitches that were caused by having too many FMOD event instances triggering at once. During gameplay, some of the puzzles ended up not reading well on the small screen, so we had to make a few camera angle adjustments throughout the game. The same goes for UI: Some icons and text had to be resized to be readable on the small screen. Last but not least, we changed the control scheme for the Switch port. We wanted to keep it consistent with the Switch convention of having the action button mapped to “A.”
One of the tasks I was directly involved in was making a list of non-essential shadow-casters and volumetric lights. In the end, we ended up reducing shadow-casters and volumetric lights by about 25% without making it noticeable. I also completely redesigned the footstep system in FMOD by reducing the number of event instances and audio channels required for the system to work. There was more audio optimization involved – some events that contained multiple audio tracks were bounced into a single track. When it comes to the use of inverse kinematics, the system used to run every frame. Again, it wasn’t making much difference on the PC, but on Switch, we wanted to get the most out of the hardware and make as few compromises as possible. As for the big prefabs (levels), we implemented asynchronous loading and made a progress bar to go with it. All those little things, along with reducing the resolution of texture atlases, added up to a significant performance boost.
I think it’s pretty amazing that the optimization work that was done allowed us to run DARQ on Switch with lots of real-time light sources and shadow-casters. Also, it’s worth mentioning that we didn’t make any changes to the geometry. DARQ is known for its detailed 3D environments. At first, I thought it would be necessary to reduce the poly-count of most of the models in the game, but that wasn’t the case. We managed to keep the level of detail completely unchanged. Out of all ports, I’d say the Nintendo Switch version is particularly impressive when it comes to optimization.
1: Structure your code in a way that makes sense. Stick to one naming convention, whatever it is, and keep it consistent throughout the entire project. What makes projects hard to port is the lack of consistency in the way a game is coded. This often happens on larger projects, where multiple programmers are involved and no unified coding style is established. Also, make sure your game can run no matter what scene is currently opened in the Editor. This will make the life of whoever ports the project a lot easier. Comment your code, but also don’t overdo it. Name your classes, methods and interfaces in descriptive ways – this makes comments redundant in most cases and speeds up the development. Avoid monolith classes with thousands of lines of code. Split your code logically and try to avoid dependencies (also known as spaghetti code).
2: Use Profiler and watch out for your texture memory. Use texture atlases and have objects share materials as much as possible. This will reduce the number of draw calls, which is something you want when every frame per second matters.
3: Remember that a handheld device like Nintendo Switch is relatively small, so design your UI to reflect that. If your game was originally developed for the PC, you may need to resize your fonts and UI elements to make them easier to read (which we did for the Switch port).
I would have downloaded Unity much sooner, of course! Seriously though, I realize how lucky I am and I pinch myself every day. I’ve made many mistakes along the way, but I don’t regret making them – they became valuable lessons. Even in my wildest dreams, I couldn’t have imagined that DARQ would be nominated for awards (and win some) alongside AAA giants like The Last of Us Part II, Death Stranding, Borderlands 3, Call of Duty: Modern Warfare, and others. Losing an award to Hideo Kojima, my childhood hero was one of the greatest honors of my life. There are so many people I’m grateful for, who have contributed to the success of DARQ. Although the list is nearly endless, I want to thank the team at Unity who has been supportive of my journey since the early days, Scott Millard (Managing Director at Feardemic), Piotr Babieno (CEO of the Feardemic’s parent company, Bloober Team) and Joni Lappalainen (CEO of Dreamloop Games).
For further support, Unity’s Accelerate Solutions team offers a variety of engagements to help studios of all sizes achieve their goals. From consulting on performance optimization to stability improvements to porting expertise, our consultancy team can identify the roadblocks and steps required to complete any project. The Accelerate Solutions team is made up of Unity’s most advanced engineers, ready to work alongside your team to execute your project from start to finish so that you have the freedom to focus on other creative aspects of your game.
To learn more about porting to Nintendo Switch, check out our e-book Five mistakes to avoid when porting your game to Nintendo Switch.
Other helpful resources include Unity’s forums, where you can get tips and tricks from other developers. You can also check out Wlad Marhulets’ book, GAMEDEV: 10 Steps to Making Your First Game Successful.
Answers attributed to Wlad Marhulets