Twin Fates

Project overview

I worked on Twin Fates for my last year project at Supinfogame RUBIKA.The project took 9 months, with a team of 6 students.
I was the programmer of the team.

Twin Fates is a 2 players cooperation action-adventure game in which the 2 characters are linked to each other with a physical link.

It relies on platform, combat, puzzles, but most of all cooperation and communication between the two players.

The link can be seen as a weakness, but it also is their greatest strength!

The game offers many different situations, relying on platforms, combat and puzzles.

These game pillars are heavily influenced by cooperation between the players, and allow to have a really rich and diverse game.

The link between the two characters offers a lot of varied gameplay and features:
> Pull other player/elements
> Circle elements
> Zipline!
> Swing, hang in air
> Cutting with the link
> Slingshot technique
This project included coding several tools for the game designer and level designer to use:
> Behaviour-centered cameras
> Advanced Zipline editor
> Interactive element
> 100+ parameters script editor
> Utility addons for Unity3D
The pipeline we used on this project relied on quick prototyping and iterations.

We were able to regularly and quickly implement new features, test them, and improve them.

The link between the players relies completely on the physics engine of Unity, in most situations. But it has a really complex behaviouron its own, that ensures the game stays a really fun experience.

It prevents players from being too far from each other, allows them to bring their friend up if they fell, and many more useful features. It has been a hard work making the game work perfectly with physics influencing the players at all time: I had to really control the forces applied to the characters, at all time.

Here, the physics are disconnected for the zipline
There also are moments where the physics have to be disconnected completely if you want to keep control.
The zipline system is a good example of this:instead of using physics, the players will get in position and follow a path, that has been created by the Level Designer, and decorated (with a vine, for example) by the Environment Artist.However, the zipline is only one of the many activities possible thanks to the link.

Here are the main ones:

> Cutting/slashing elements
> Pushing/pulling heavy elements
> Circling enemies or objects
> Slingshot technique!
> Pulling your friend up
> Pulling your friend down (huehuehue)
> Getting entangled in some elements

This was a long project that required a lot of testing, improvement, and iterations.

However, we reached a point where the link is a really permissive toy, which makes the game fun for anyone while staying accessible.

Player navigation
The game feel in Twin Fates is really important: you have to be able to do all kind of stuff without being impaired by the physics, the collisions, and all of this must come naturally. While it is difficult to give a nice game feel with a humanoid character, it is really complicated with a quadruped such as Scyanda, the second character of the game.

Also, the players have a common base, but have very different abilities:

San, the human, can shoot, double jump, and hang on ledges.
Scyanda, the wolf, uses melee attacks, has a shield and can walljump.

This means I had to use OOP to implement the characters’ behavior and abilities. Their script contain more than 1000 lines each, and are sub-classes of the same script which is over 3000 lines deep.

I also used inheritance for other elements, such as enemies or interactive objects, since they all work in the same ways, with many differences in the execution.

These behaviors obviously had to be configured by the game designers,
but it would have been an ordeal without the editor scripts I made.


Unity3D allows creating custom editors for scripts that can use dynamic elements, curves editing, and much more, which helped us work even more efficiently.

These require creating new scripts, based on the class UnityEditor. They allow creating settings editors, quick-access interfaces, and much more.

It was a really nice experience having to create something that’s used by someone who isn’t as technically knowledgeable as me about the scripts I wrote, and it was really rewarding seeing Steven, the game designer, using them easily and happily.

It gave me many ideas, and I plan on using these editors in some of my procedurally-generated levels-based projects. Especially the quick access toolbars and the waypoints manager (used for both cameras, ziplines, and moving obstacles!).