Atlas is a therapeutic application that lets you write away your problems in a safe and calm environment.

video here

Atlas is like a diary, you write down your problems or thoughts that trouble you and you put them in a place that no one can ever read them. These little notes are put in a mailbox, which is carried by the main character. After writing a note you get the opportunity to relieve the weight on your characters shoulders, by throwing a box at the stack of boxes. The purpose of Atlas is that you lighten the literal weight of the character's shoulders in the digital world, while lightening the figurative weight on your own shoulders in the real world.

Atlas was made during an applied game jam on the HKU. During this game jam, the goal was to make a game for children that struggle with mentally ill parents. The game jam was a collaboration with exchange students from south Korea.

My Contribution

My responsebility in this project was game play programming for this game. It was a challange to build a game in sutch a short time and was a informative experiance.


In door enviroment.

I wrote most of the game play for this game and a shader for achieving the stylized look. It was the first time I did most of the programming of a game on my own. It was quite a challenge to build a game in such a short time and proved to be the deciding factor for switching my education program from game art to game design and development.

Shader "Custom/DirectionalColor" {
    Properties {
        _ColorX ("ColorX", Color) = (1,0,0,1)
        _ColorY ("ColorY", Color) = (0,1,0,1)
        _ColorZ ("ColorZ", Color) = (0,0,1,1)
    SubShader {
        Tags {
        Pass {
            Name "FORWARD"
            Tags {

            #pragma vertex vert
            #pragma fragment frag
            #define UNITY_PASS_FORWARDBASE
            #include "UnityCG.cginc"
            #pragma multi_compile_fwdbase_fullshadows
            #pragma exclude_renderers gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2
            #pragma target 3.0

            uniform float4 _ColorX;
            uniform float4 _ColorY;
            uniform float4 _ColorZ;

            struct VertexInput {
                float4 vertex : POSITION;
                float3 normal : NORMAL;

            struct VertexOutput {
                float4 pos : SV_POSITION;
                float3 normalDir : TEXCOORD0;

            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.normalDir = UnityObjectToWorldNormal(v.normal);
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex );
                return o;

            float4 frag(VertexOutput i) : COLOR {
                i.normalDir = normalize(i.normalDir);
                float3 normalDirection = i.normalDir;
                float3 squared = (i.normalDir*i.normalDir);
                float3 finalColor = (squared.r*_ColorX.rgb + squared.g*_ColorY.rgb + squared.b*_ColorZ.rgb);
                return fixed4(finalColor,1);
    FallBack "Diffuse"