CO-OP Design Project


Our players find themselves in a childs dream. They need to use their cooperation and special abilities to reach the top of a pile of presents.

About our level

  • Developed over 5 weeks half time

  • Developed in Unreal Engine 4

  • 3 group members

  • Inspired by It Takes Two



Elvira Smakić

Level Designer


Stefan Groothuis

Level Designer & Tech Designer


Jacky Coh


After playing through It Takes Two Elvira and I knew we had to make an It Takes Two inspired level.
Jacky joined us as an animator to help us create fully fletched out player characters.

Together we created this project!

What I did on this project

As both a Level designer and a Tech Designer I had many responsibilities during this project. There was A LOT of features that needed to be implemented as fast as possible so my colleagues could start working.

Further on in development I took over responsibility for
ACT 1 and ACT 3 of our level.

We started with a blank Unreal Engine 4 project and over the course of 5 weeks we transformed it into a
fully playeable level.

In the following segment I'm going to go through
some of the features I created and how they work together in our level.


Features I implemented for this project:

  • Basic movement

  • Jumping

  • Double Jumping

  • Dashing

  • Sliding on threads

  • Swinging in threads

  • Swinging as Fred

  • Tightening rope

  • Slide on tightened rope

  • Throw needle on soft surfaces

  • Swing on Kneedles needle

  • Pop balloons with needle

  • Attach needle to dynamic objects

  • Drag dynamic objects

  • Drag dynamic objects together

  • Activate lever together

  • Spam Y button

  • Open drawers

  • Train riding on train tracks

  • Player death

  • Player respawn

  • Cutscene start

  • Moving drawers

  • Unlocking another needle

  • Fans push objects

  • Stopping Fans with needles

Level Structure


We decided that our level should follow a three act structure, with each act being a bit more dreamlike than the previous one.

The purpose of the first act is to introduce the players to a new environment and
teach the players their abilities.

Act 2, created largely by Elvira serves to
up the tempo and twist our mechanics to make the player feel like they mastered them.

In the third act we chose to turn the cooperation element on its head and create a
grandiose race between both players, pushing our abilities to their limits.


ACT 1 - Onboarding


Act 1 went through many iterations, the first iteration was a very short onboardning sequence, quickly going through every mechanic used later in the level.

After playtesting we realised that we introduced
too many mechanics too rapidly and so we chose to double the length of the act.



ACT 1 before iterations


The players start in a broken ventilation system that they fell down in an imagined previous level.

Here both players have
a chance to relax and adjust to the controls before being thrown into the rest of the level.



Jumping And Dashing

We recreated the basic movement from It Takes Two, both players have the ability to double jump and dash in the air to cover larger areas.

Sliding Along Threads

Both players have the ability to slide along threads that are placed in the level, we started by just using straight meshes like this one.

I use a
two-line intersection formula to calculate where the target icon should be displayed. One line is the forward vector of the players camera and the other is the line itself.

Swinging In Balloons

All balloons have the option to have a thread hanging from the bottom in which both players can swing, the swinging motion is done using two timelines, one controls the height and the other forward motion. 

The player can
turn freely while swinging and jump in any direction the feel like!

The swinging system uses
the same two line intersection formula as the sliding system to display their icons.


Line intersection formula

To calculate the point where the icon should be displayed I select two axs that I want to draw lines on. Balloons and threads use the same formula but different axises.

Seen on the right are the
two lines, and the point in which they intersect. This point is then converted into world space and used by the icon to set it's own position.


Starting To Cooperate



Fred has the ability to swing with their thread to reach locations Kneedle can't access.

The locations where Fred can attach their thread are determined by target actors which I designed to be
easy to use even if you're not familiar with the technology behind them.



I scripted the ability for Fred to attach their thread to a number of different targets. By attaching to a needle stuck in a solid object Fred starts stretching their thread, allowing Kneedle to slide across.

To keep the thread stretched the player must rapidly press the Y button.
 I decided to incorporate a button mash to
always keep both players busy


Kneedle can reunite with Fred by sliding across the thread that the other player is struggling to keep steady. I use the player cameras forward vector to determine where the target should be rendered along the thread.

If the other player doesn't press Y fast enough the thread snaps and Kneedle falls down.

Full Playthrough of Segment


DrawOverview2 (1).png

Throwing Needles

Kneedle can throw the needles on their back to create targets for Fred to aim their thread at, when creating this mechanic I took heavy inspiration from the nail in the It Takes Two level "The Shed".

I made the needle bounce off surfaces that don't have a
certain collision type, we used this to only make the nail get stuck in soft objects such as presents or socks.


Popping Balloons

When designing features for our level we thought a lot about the players intrinsic knowledge, so we wanted an obstacle that the player instantly would connect with the needle. 

We use the balloons in many parts of the level, in many different ways. but one thing is consistant,
Kneedle can always pop them!

Full Playthrough of Segment



Dragging Objects

When thinking of ways to combine both players abilities we knew we wanted the players to be able to drag objects with the thread. 
I made it possible to
drag any dynamic object simply by throwing a needle at it.

I had to develop a custom constraint system to make the dragging system feel realistic. If the object is really heavy it takes two to move it.

Activating levers

Using the dragging system as a template I created a target that could be used to trigger blueprint scripts, we used this to flick levers and play sequencers!

To trigger the target both players have to rapidly press Y.


We use trains as a moving platform that makes sense in a kids dream. These trains follow a spline system and can be turned on or off.

Just don't touch the tracks when the electricity is on..

Full Playthrough of Segment



ACT 2 is the largest section of out game, the purpose of the segment is to twist the mechanics that the player learned in ACT 1 and use them in new ways. 

Our goal was that when players finish ACT 2 they
feel like they have mastered their abilities. In act 2 we also introduce many new puzzle elements such as fans, levers, trains and Kneedle unlocks their second needle.

For more information about ACT 2 i highly recommend looking at the portfolio of 
Elvira Smakić which goes into further detail as she is the mastermind behind this act.


HighresScreenshot00009 (1).png

In ACT 3 we chose to flip the cooperation dynamic on it's head and have both players race eachother instead. 

I used this as an opportunity to
push all mechanics I've created to their limit, the players are constantly sliding and swinging at great speeds.

The level is divided into
three sections:


We never explicitly tell the players that they are supposed to race against eachother. Instead I created a racetrack countdown and from our playtests that was enough for the players to figure out that a race was starting.

Right when the gate opened I wanted to
frame the pile of presents to once again reinforce their end goal.




From this point onwards both players follow roughly the same path but can choose to take different shortcuts to overtake one another.



The finale is a race to the top of a pile of presents, both players arrive by train and slide, swing and jump their way to the top.




Balloons can behave in many different ways, from rising into airstreams carrying a present to bobbing in place as a swingpoint.

When designing the balloon I knew it was crucial that
as much data as possible was exposed to the user so that anyone could adjust them to fit their needs.



Railways are made up off a spline and trains. The trains are made from different wagons, the wagons can in turn carry other entities such as teddy bears.

In order
to make multiple layers of blueprints accessible to the user I created a list of all trains on the track, and for each train in the list the user would add a list of all wagons and what they should carry.


Using Data Tables to make small adjustments accessible

I mainly used data tables for our target system, but also for managing our camera system along other things. Using Data Tables meant anyone could alter small variables without getting into the actual scripts.

Our targeting system got very complex by the end of the project and organising everything with data tables
saved us alot of time.



This project turned out really great, and even though it could use a few extra weeks of polish it's actually really fun to play. In that regard i'm really proud.

Though I do regret that I had to spend so much time working on background systems such as a targeting system. If I were to go back in time I would want to work together with a programmer for some of the heavier systems and
focus more on creating an exciting level

Working in a team worked out great, using the experience we got from our group projects to create a game in a small team has been
extremely fun.