This in an archived project.
It might be incomplete and/or doesn't necessarily represent me as a game developer today.
mobile futuregames mightanddelight unity c-sharp
/assets/game/garden-of-aesther/logo.png
Game title Garden of Aesther
Platform(s) Android & iOS
Development time 7 weeks
Development period May – June 2015
Main role(s) Lead Game Design, Lead Programmer, & Project Manager
Team size 9
Game Engine Unity

Garden of Aesther is a game that I made when I went to Future Games. It’s a story based game about a world that has lost all its flora. Aesther’s job is to bring it back to life and unravel the mystery together with your involuntary partner.

My tree primary roles were as project manager, lead designer and lead programmer. Since I was the most experienced group member in Unity it naturally became my job to coordinate the team and to have final say on what should go into the game. As a programmer my biggest achievement was to design and implement the character including movement, implementation of animations, the camera and planting – the core mechanic. Together with the team we created a number of systems including quests, dialogues and an inventory.  We worked with Scrum and delivered weekly builds along with other tasks such as a marketing plan for our game.

During the development the independent game studio Might and Delight acted as our publisher. It was an instructive and challenging task since we had to change and adapt the game according to their feedback, much like in a real studio environment.

Video

Screenshots

/assets/game/garden-of-aesther/screenshots/Screenshot_2015-08-04-22-21-16.png /assets/game/garden-of-aesther/screenshots/Screenshot_2015-08-04-22-21-31.png /assets/game/garden-of-aesther/screenshots/Screenshot_2015-08-04-22-22-22.png /assets/game/garden-of-aesther/screenshots/Screenshot_2015-08-04-22-25-56.png /assets/game/garden-of-aesther/screenshots/Screenshot_2015-08-04-22-26-23.png /assets/game/garden-of-aesther/screenshots/Screenshot_2015-08-04-22-33-46.png /assets/game/garden-of-aesther/screenshots/Screenshot_2015-08-04-22-46-30.png /assets/game/garden-of-aesther/screenshots/Screenshot_2015-08-04-22-54-31.png /assets/game/garden-of-aesther/screenshots/Screenshot_2015-08-04-22-55-38.png

 

Scripting character movement

I put much work into making a great feeling third person controller for mobile devices, something that I hadn’t seen in any other game before. Constantly letting other people try it and make adjustments according to their feedback helped to make sure that I wasn’t just making enjoyable controls for me but also for others. We did a lot of testing and finally decided that using a joystick to move and a touch pad area to rotate the camera was the best solution for our game.

void JoystickToWorldspace(Vector2 joystick) {

	//Get camera rotation
	Vector3 cameraDirection = playerCamera.forward;
	cameraDirection.y = 0.0f; //Ignore Y direction
	cameraDirection.Normalize();

	//Convert joystick input in Worldspace coordinates
	moveDirection = cameraDirection * joystick.y + playerCamera.right * joystick.x;

	//Applies the speed parameter that has been set in the inspector
	moveDirection *= speed;

	//Applies the movement
	moveDirection.y -= gravity * Time.deltaTime;
	charController.Move(moveDirection * Time.deltaTime);

	//Degugging
	Vector3 axisSign = Vector3.Cross(moveDirection, transform.forward);
	Debug.DrawRay(new Vector3(transform.position.x, transform.position.y + 2f, transform.position.z), moveDirection, Color.green);
	Debug.DrawRay(new Vector3(transform.position.x, transform.position.y + 2f, transform.position.z), transform.forward, Color.magenta);
	Debug.DrawRay(new Vector3(transform.position.x, transform.position.y + 2f, transform.position.z), joystick, Color.blue);
	Debug.DrawRay(new Vector3(transform.position.x, transform.position.y + 2.5f, transform.position.z), axisSign, Color.red);
}

Painting the ground

I was also in charge of implementing  the shader and functionality for bringing back the flora to the island.

painting

From the beginning of the project there was an idea to be able to make the area around the flora green when planting. There was many different ways to achieve this and I laid out a lot of options such as adding a chunk of grass meshes, putting green decals on the ground and overlaying the ground with meshes. In the end we decided to use the vertex colour of the mesh to lerp between two textures, a brown muddy texture and a green grass texture because it was both the best looking and most efficient method for our target platform, mobile.

void VertexPaint() {
	//Find all of the overlapping colliders
	overlappingColliders = Physics.OverlapSphere(transform.position, circleDiameter, currentPlanetLayer);
	if (overlappingColliders != null) {
		//Go through all of the colliders
		for (int i = 0; i < overlappingColliders.Length; i++) {

			//Get transform
			Transform meshTransform = overlappingColliders[i].GetComponent<Transform>();
			//Get mesh
			Mesh mesh = overlappingColliders[i].GetComponent<MeshFilter>().sharedMesh;
			//Get array of vertices location
			Vector3[] meshVertices = mesh.vertices;
			//Get array vertex of colors
			Color32[] colors = mesh.colors32;

			//Go through all of the vertices
			for (int j = 0; j < meshVertices.Length; j++) {
				//Go through if vertex has not been painted
				if (colors[j].g == 0f) {
					//Get world position
					Vector3 vertexWorldPoint = meshTransform.TransformPoint(meshVertices[j]);
					//Get distance
					float distance = Vector3.Distance(transform.position, vertexWorldPoint);
					//Paint if close enough
					if (distance < circleDiameter) {
						//Set new vertex color
						colors[j] = paintColor;
					}
				}
			}
			//Apply color to vertices
			mesh.colors32 = colors;
		}
	}
}

To make the transition between painted and unpainted ground look more natural and interesting I created a shader using Shader Forge. It’s using the vertex color of the mesh and a noise texture to know what texture it should display and how to blend in between them.

painting_shader painting_0 painting_1 painting_2

First person mode

In the the inventory the player can find binoculars that enables the player to see the world from a first person view. Moving the phone rotates the camera using the phone’s gyroscope to look around – it’s like a window into the world of Aesther.


This in an archived project.
It might be incomplete and/or doesn't necessarily represent me as a game developer today.