top of page

There Was Light

There Was Light is a 2D platformer where the mechanics are based around light. Darkness limits the information given to the player and light guides the player. Through the game, the player stumbles upon new mechanics and skills to help them navigate in the darkness. In turn, the levels also get harder and the player has to combine all skills and mechanics to make it through.

Project length: 2 weeks

Year: 2021

Team size: Solo Project

Engine: Unity

My roles: Everything

Design Pillars

Fluent movement

The character moves fluently through the world and is easy to control. Jumping should be natural and the player should feel like they have control.


The player is not punished for jumping a little bit too early or testing something out. The respawn point is never far away and happens instantly.

Dark but hopeful

Levels should be designed with guiding lights which will help the player navigate but also add a sense of hope. Maybe you can find a way to light up this dark world?


The character is an unassuming blue rectangle. It moves fluently through the world and is animated with joyful little movements when jumping. The character emits a vague blue light, which helps the player during the first level, before they acquire the flashlight. The art style was chosen to let me put most of my effort into the gameplay and level design during the assignment.

Character moving through the level


At the start of the game the player can only walk and jump. Later they unlock a flashlight which can be turned on and rotated with the mouse. To give the player a sense of control the jump was designed to make the player fall down faster than they jump up, as to not make the jump feel floaty. The jump height was designed to work with the tiles and I set standard that I could later use in the level design.

Gif showing the character moving and jumping


The levels are made up of smaller rooms, where the player has to find a key in each room to unlock the door to the next room. As light is limited, the camera zooms out to a fixed position showing the whole room. This was done so that the player quickly can get a sense of the room and start to figure out how to solve it. Between the rooms, the camera zooms in and follows the player. This also provided a sense of scale in larger rooms.

Gif showing the camera transitions

Level Design

I approached the level design by sketching out puzzles. After that I put together a map for each level to get a sense for the progression.

  • The levels are made up of several smaller rooms.

  • The player must get the key in each room to unlock the door to the next room.

  • The rooms are designed to introduce and teach the player new mechanics.

  • The last few rooms of each level combines all previously learned skills to provide a challenging experience.

Draft of metrics for the character jump



Elevator Puzzle


Jump Tutorial


Platforming Challenge

Image of the level design map sketch with explanations of gameplay elements

Level 1

The first level serves to introduce the player to the movement and lack of light.

A map planning out the second level

Level 2

The second level introduces the flashlight, and all rooms require the player to use the flashlight to navigate.

A gif showing the flashlight mechanic


The flashlight reveals platforms hidden in the dark.

Technical Design

To make the jump feel more controllable and not as floaty I wrote this script for the player to have the gravity change on the way down.

Image of the inspector in Unity showing settings for the elevators in the game

The first iteration had multiple prefabs for different types of elevators. Some where meant to be activated by a button while some would be activated by the player stepping on them. To make level design easier I implemented a script where the different types of movements could be set in the Inspector in Unity.

The flashlight was coded to follow the mouse. In the first iteration the flashlight would follow the mouse perfectly, but this did not feel very natural so I added a speed variable and used Slerp to make it have a little bit of a delay.


bottom of page