Devolution

30 Sep 2015

Devolution is a 3D game built with Unity 3D but it was not brought to completion due to limited 3D modeling skills and lack of experience with 3D game engines. The game is about a man who walks around the earth consuming every natural resource with a dull expression on his face till the planet is completely polluted and destroyed. It presents a dark and comical perspective towards the evolution of man.

Devolution Picture

Role

This project was in collaboration with Mihail Mihaylov and Bawer Parada. Character and Environment Design was undertaken by Mihail, 3D Modelling and Animation by Bawer and, Programming and Implementation was taken care of by me. Apart from this, me and Mihail were also responsible for the conceptualisation and storyboarding of the game.

Summary

The scene begins with a confused man called “Gus” walking around the planet. No instruction or tutorial is provided, so the player has to explore and figure out their objective on their own. This is in parity with Gus - the confused human standing on a planet. Bored and hungry, he starts walking around. He spots a natural resource nearby, goes to it, consumes it and pollutes the area. He keeps doing this. 70% into the game, there is a cut scene where a news report shows that world is being destroyed. The human continues to plague the planet. Near the end of the game, the final cut scene comes with a news report about global crisis. The player keeps on polluting till the planet is destroyed and “The Human” is declared as the winner ironically. The storyboard of the game is as below:

Storyboard

Technical Information

The essential action of the game is that of a character walking on a planet. So the space should have a planet in the center which can be represented by a sphere. For a character to walk along the sphere, gravity needs to be defined. However along with the gravitational force which keeps the character on the surface, the y (up) rotation of the character should be along the surface of the sphere as well. To figure this out, we need a vector from the center of the sphere to the present position of the character and rotate his y axis to this vector. The gravity attracts the body along the same vector.

*gravityDirection = characterPosition (x, y, z) - planetCenter (0, 0, 0)*

Apart from making the character walk on the planet, the natural resources as well as other elements of the world needs to be spawned on the sphere in a random manner. For this random points are to be located on the sphere and then the object must be rotated similar to the character.

The equations of the points on the surface of the sphere are:

*x = cos(theta) * cos(phi)
y = cos(theta) * sin(phi)
z = sin(theta)
where,
    x, y, z are the coordinates of the point,
    -90 <= theta <= 90,
    0 <= phi <= 360*

So with an incremental value of the angle phi and randomising theta we can find random points on the sphere. We spawn the natural resources and other natural elements like rocks and trees on these points and align them along the surface of the sphere. The game starts with the planet’s health at 100%, and with every collision between the player and a natural resource, planet’s health decreases. The game ends when the planet’s health is 0%. This logic was used to create a working prototype of the game in Unity. Below is a video of the gameplay that was achieved:

Closure Statement

Along with adopting the various design and technical aspects of game development, we gathered experience as creators of a game. We went through the process of imagining a game and drawing sketches of it till the process of actually being able to play the game we had in mind. It took us some time to realise our tools and the environment we were working in. Reaching a dead end with Unreal Engine, our initial Game Engine choice, was the primary reason for which the game was not completed. A lot of time was wasted in repeating the learning process with Unity. But this project was a strong reality check about how extensive and time consuming a simple game development project can be.

The documentation of this project is available here.

Back