Dev Diaries: Making MIRROR through the Unreal Fellowship: Games

Kher.exe
Sun, 12 Jan 2025 20:38:22 +0000
Showcase

Dev Diaries: Making MIRROR through the Unreal Fellowship

How a thought provoking couch co-op came about

Hey there! We are Elena Felici (Carbon®) and Valentina Pantaleoni, an Italian duo consisting of a nerd of all trades and a concept artist.
After a challenging year, we wanted to hit the pause button and let the creative juices flow without the distractions of the outside world. That’s why we applied to the Unreal Fellowship: Games, which gave us the time and tools we needed.
During this time, we developed our first indie title, MIRROR using Unreal Engine 5.4.

MIRROR is a minimalist co-op puzzle platformer featuring a split-screen mechanic where two players navigate mirrored environments in a single viewport; using their own abilities while helping each other to reach the end of the level.
Designing our game required specific planning and development. We’re here to humbly share how our journey went, hoping it can spark some inspiration for anyone reading this article.

Coming up with the idea

Inspired by games such as Monument Valley and Brothers: A Game of Two Sons our goal was to come up with an original mechanic deeply linked to the story. We believe storytelling should be your main compass when developing any form of art, everything should sparkle from it. Only this way can a project feel sincere, heartfelt and honest. Right off the bat, we felt intrigued by the idea of using the co-op mechanic as a form of collaboration, where players could learn and support each other. Be a team.

Our initial idea was similar to A Way Out or Ico, the two players are chained to one another. Starting out this constraint feels more like a weight, but as you advance you learn how to use it to your advantage. Unfortunately, both the design and the technical development of such a mechanic were too time consuming to figure out in a few weeks. We decided to go in a different direction.
After a few further attempts, Valentina sketched out this idea of a mirrored environment, with Player 1 at the top, and Player 2 at the bottom. When a player jumped on a platform, it disappeared in the other player’s environment. The players needed to work together and communicate to ensure they both had a path forward.
This idea felt more approachable, a simple and original game loop we could expand upon.

|
|

We envisioned the two characters as two sides of the same coin, representing the Yin and Yang of our personalities. They embody those moments when your desires lead you in one direction while logic guides you in another, or vice versa. You feel stuck in a body torn between opposing forces until you establish a dialogue with yourself.

|
|

Shaping the minimalist look

Developing the Art Direction, we wanted to keep an experimental approach and push for a look not often used by the games we play -- somewhat unique and unexplored. The two main inspirations behind it were Gris and the album covers of the Italian band Nu Genea. The look is minimalist and graphic, based on simple shapes and flat colors. It’s appealing, but also fast to put together. Based on the multiplanar camera setup, we placed a few planes at different depths to create a parallax effect.

This surreal and abstract world shaped an oasis where the players could lose themselves and their sense of space and time. You’re basically playing a mirage.

Red & Blue: the main characters

Two characters, two players, one world. We had to make sure each player could easily focus on their character of choice.
To facilitate gameplay, especially for the player who would be upside down during the run, we assigned two distinct skills: one character could dash, while the other could wall jump. This decision allowed both players to explore their environments—both mirrored and non-mirrored—in unique ways, making sure that playing as one character in the upright space felt distinctly different from playing upside down.

The character design had to align with the simplicity of the art direction and the character’s different skills. We designed the blue player as a wall jumper with long, powerful arms for climbing. In contrast, the red player is a slender, triangular character with only two legs, emphasising agility and speed.
Blue embodies a sense of calm, determination and resilience. It represents rational thought and emotional control. On the contrary, Red is impulsive, passionate and anxious. Reflecting the emotional response overriding logical thinking.

The challenge of Level Design

Designing the levels for MIRROR proved to be one of the most challenging aspects of the development process. Firstly, we faced a steep learning curve in level design, and we needed to concentrate on a few core mechanics that could be consistently applied throughout the game. Given our limited time frame, it was essential to avoid introducing the development of new mechanics and instead focus on refining those we already had.

Valentina took the initiative to study how other game designers approached similar puzzle platformers, such as Braid and Celeste. She even played through the entire Celeste title as part of her research. The series of videos we watched to learn level design are collected in this YouTube playlist.
We had to start simple, making the players run through a few levels without danger. Gradually, we introduced new skills and platforming mechanics. We crafted each level to ensure the game remained entertaining, while teaching the player how to master it.
Once the levels were approved and tested, Valentina hand-painted each one based on the initial drafts.

| |
| |
| |

Fake Split-Screen in Blueprints

The fake split-screen aspect of the game was an interesting one to tackle, we weren’t using double-cameras or an actual split screen setup, but rather constructing the mirrored platforms directing on Event BeginPlay. We were then checking for overlapping actors on Event Tick and reacting accordingly, making a platform disappear, move, or the characters to swap. At the time it felt like the simplest approach, thinking about it, maybe going for the double-camera setup would have worked too.

Click on the image to open the link

Precise and responsive movements

The most important aspect of a proper platformer is the player’s locomotion, it needs to be very responsive, accurate and fast.
Starting off from the Third Person Template, we noticed the character’s movements were too floaty and slow. The Character Movement Component needed some adjustments, starting from the Walking Speed, moving on to the Acceleration and Gravity.

The character had to reach the Maximum Walking Speed almost immediately, therefore we set the Velocity vector by multiplying the Actor Forward Vector with the Max Walk Speed component of the Character Movement.

To make the character fall faster, we used the Launch Character node and increased the Gravity Scale on Is Falling set to true.
In the Character Movement’s General Settings, we set the Max Acceleration to a really high number, together with the Ground Friction, Braking Deceleration Walking and Jump Z Velocity.

UE5.4 Custom Gravity in Gameplay

The upside-down mechanic would not have been easily achievable without the new Custom Gravity feature introduced in Unreal Engine 5.4, which enables you to switch the player’s gravity using a simple node: Set Gravity Direction.

On Event BeginPlay we checked whether the Actor Location was above or below 0, based on that we switched the Gravity Dir Z of the node either to -1 or 1 (upside-down).

When triggering the Switch Character Button in Gameplay we simply inverted the effect on the two characters.

Conclusion

The development of Mirror has been an incredible journey that demonstrated both the efficiency and challenges of independent game development - showing us how much can be achieved in a short timeframe.
One thing is certain: without the versatility of Unreal Engine, achieving our goal would have been significantly challenging.

The journey isn’t over yet. This year, we’re diving deep into polishing our level design and fine-tuning those gameplay mechanics until they sing. Once we’re happy with our vertical slice, you’ll find us on itch.io. We’re also exploring the possibility of implementing it as a web-based experience.

A massive thank you to our amazing classmates and staff from the Unreal Fellowship: Games program, and to you, dear reader, for sticking with us through this devlog.

To stay updated on our development progress, follow us on our social media channels—we’ll be sharing exciting updates soon!

See you in-game! Ciao!

5 posts - 3 participants