Dotnet logo

.NET Tools

Essential productivity kit for .NET and game developers

.NET Tools Rider

How Tarsier Studios Brings Little Nightmares to Life With JetBrains Rider

Today, we have Tristan Louet and Meghan Corso from Tarsier Studios with us. Meghan is actively involved in advancing Unreal Engine support in JetBrains Rider and ReSharper C++, while Tristan leads the core technology team, focusing on plugins, reusable solutions, infrastructure, and methodologies. This special interview will give you a firsthand insight into their experiences and perspectives. So, without further ado, let’s dive right in.

Tristan Louet, Lead Programmer at Tarsier Studios

Tristan Louet

Lead Programmer at Tarsier Studios

What kind of games do you specialize in?

The most famous game we have is Little Nightmares. It falls into the category of narrative, atmospheric, and tense gameplay and takes a single-player format with some AI-based NPCs thrown in. At the core of our games lies a unique emphasis on atmosphere. We like to think of it as a sort of environmental storytelling, but there’s also playfulness there. That’s kind of our trademark: our creatures are scary-looking and deformed but also somewhat playful and cute for children. And this includes the enemies, too – those big monsters that are extremely hard to defeat. 

We invest heavily in AI development, particularly in creating cool monsters with unusual abilities. For instance, one of our monsters boasts a super-stretchy neck and catches players off-guard by extending its neck to move its head around the room and identify any intruders. Our goal is to introduce elements that are both fun and strange, pushing the boundaries of conventional gaming experiences.

Concept artwork for “The Teacher” in Little Nightmares 2. Artwork credit: Bandai Namco

We release games for Steam, Xbox One, and PS4/PS5. We’ve also released games on Nintendo Switch, although for those releases, we collaborate with specialized companies for porting. In our case, Engine Software handles the optimization process, as this is a really tricky step.

Tell us more about your team in general.

There are about 70 people at the company. This includes a team of roughly 15–20 programmers. And when we say programmers, we’re referring to a wide range of roles, including gameplay programmers, those involved in systems solutions, and those who create plugins – primarily within the Unreal Engine framework.

Tarsier’s Tooling for Creating Games

Which tools do you use? 

We try to always use the latest version of Unreal Engine, though we typically wait for hotfixes due to the inherent regressions that accompany new releases. We are currently on 5.3.2 and planning to move to 5.4.1 soon.

Our approach is to avoid heavy modifications to the engine itself, opting instead to extend its functionality. Even as we approach release deadlines, we continue with upgrades, especially when they come bundled with crucial software development kit (SDK) updates.

Most of our programmers use Rider. For version control, we use Perforce, and for continuous integration and delivery – TeamCity. We also use Python for continuous integration and all the other stuff that TeamCity doesn’t do for us. For example, once we take the elements from TeamCity, even if we want to do an internal kind of distribution of binaries, we have lots of internal tooling that is mainly based on Python.

Were you using other IDEs before JetBrains Rider? What made you want to switch, and how did the transition happen?

I became increasingly frustrated with Visual Studio ever since I started working with Unreal Engine. One of the main reasons for this is that the scope of the codebase makes Visual Studio extremely slow. It also crashes all the time, for no reason. It all began to feel like too much, so I started to look for alternatives.

We were already using PyCharm for our CI/CD and infrastructure Python codebase. Moreover, I personally have been using JetBrains IDE for more than 10 years, eversince I wrote Java and Android code for my first internship in a game company. It already was a night and day experience compared to Eclipse or NetBeans back then, so I personally was already a JetBrains advocate. Hence why I was very excited to hear about Unreal support in Rider.

Rider was a refreshing change. It’s such a well-balanced IDE, with all the features and tools we need. Even in its early preview stages, Rider had enough features to support my daily work. And perhaps most importantly, it doesn’t have a problem with crashing. The overwhelming majority (15–20 programmers) embraced the switch to Rider. The transition was remarkably smooth, and Rider worked seamlessly out of the box.

Building Pipelines With Rider for Unreal Engine

Let’s talk a bit more about the things Rider helps your team with, including those you appreciate the most and find most beneficial for your team in terms of productivity.

Rider is a solid IDE, and it has all of the features that I would expect it to have and more, such as:

  • Strong performance on a range of development workflows. Rider handles a variety of tasks with impressive ease and speed, even when indexing projects in the background. The fact that it doesn’t block the entire IDE during these processes sets it apart as a more efficient and stable platform, much like Visual Studio but with enhanced performance.
  • Extensive Unreal-specific support. While I can’t pinpoint one killer feature, the collective impact of various Unreal-specific features is a game-changer. 
  • On-the-fly documentation and tips. Rider provides quick documentation and tips that give you insight into Unreal Engine right within the IDE. Using anything else would only represent a step down for us. The ability to access documentation on specifiers, easily identify blueprints using a function, or determine which blueprints are derived from a specific class significantly enhances our day-to-day work. Documenting methods with typical Unreal formatting contributes to the stability and user-friendliness of Rider as an IDE. We also love the newly added feature of showing the Blueprint virtual frames in the callstack when hitting a breakpoint. That kind of stuff truly is what sets Rider apart from other IDEs.

…and combining it with Perforce

Tell us more about your Perforce experience. Do you use Rider support for builds? Do you use a plugin for Perforce, or do you still use a separate client for Perforce?

Certainly. We use the Perforce plugin, as most teams do. It provides automatic check-out for edited files and seamlessly adds newly created files directly to Perforce through Rider. 

The team also uses the Active Changelist feature, because it’s pretty nice to be able to directly feed files to the right change list. But I’m not sure they use it a lot for actually submitting things. I see a lot of Perforce clients still open. And we use a lot of streams. While the plugin is used for automatic checkouts and initial file management, the team often utilizes standalone Perforce clients for tasks like changing streams. This shows that there’s a need for a more specialized tool in certain scenarios.

For those who are seeking to enhance their game development journey, exploring JetBrains Rider could prove to be a significant turning point. Give it a try today and see whether it meets your business needs, as it did for Tarsier.

image description