Repository Statistics

The project comes to its “official” end, because the delivery date expires today, June the 16th . I wanted to look back and see the evolution of our work.


Age: 244 days, 124 active days (50.82%)
Total Files: 2895
Total Lines of Code : 129495 (374732 added, 245237 removed)
Total Commits : 266 (average 2.1 commits per active day, 1.1 per all days)

Elendow: 97 commits. Lines of code: 275628 added, 156892 removed
Zopokx: 157 commits. Lines of code: 98302 added, 87639 removed

Commits by Month


Commits by Day of Week


Commits by Hour of Day


Total number of Files by date


Total number of Lines of code


[This information has been acquired using GitStats]

Tower Defense

Guru’s Adventure is a Tower Defense game and we have not shown any tower? We have to put a solution.
Starting from the left, we can see:

  1. Marble Shooter: A turret that shoots marbles. The basic tower. Medium range, medium attack rate and low damage.
  2. Pushpin Repeater: A turret that throws thumbtacks. Small range, high attack rate and low damage.
  3. TagShooter: A tower that hurls bottle caps. It makes damage in forward line (not area). Medium range, slow attack rate and can make critical damage easily.
  4. Needle Case: A tower that launches needles as rockets. Huge range, very slow attack rate and very high damage.
  5. Block Trap: It explodes!. The only defense that can hurt Bitter Enemies.

You’ll should combine these towers to win each stage. Good luck!

Bitter Enemies

You should already know that we have 2 different kind of enemies: the Puppet Enemies (aka OnRail) and the Bitter Enemies (aka Aggro).

When I first designed the Aggro Enemies, I was thinking about ‘hard toys’ a kid can play with, like spinning top or huge marbles. We worked with this idea, but one day I changed my mind. I was thinking in making tribute to another videogames (like as seen before in the Coin Values), when Pac-Man ghosts came to my head.

Elendow liked the idea, so I designed 7 different aggresive enemies. These were intended to be the basic enemy, and later on create harder ones, but we liked these ghosts so much that we let them to be the centre of attention.
You may don’t believe this, but our Aggro Enemies codenames are the same as Pac-Man series ghosts:

Do you see that every one has a different face? That is because every Bitter Enemy in game will have a random expression. Some are really funny. Do you want to see all of them? You will have to play Guru’s Adventures!

Guru is here!

Guru is the main character (well, the only one right now) starring its own adventure. He is a knight and is equipped with a peashooter. Its main projectile is a paper ball.
Be careful! Guru is very skilled. Well, that depends on you… hehe.

We started designing some kind of plushie or toy with a knight armor, but the main goal was having a main character who could change its outfit in a future: archer, wizard, ninja, blacksmith… (DLC? Who knows)
So, Guru is like Final Fantasy Black Mages. We don’t know his appearance, we only can see his yellow eyes.

Props Collection

This is the entire models collection for the 1-1 Stage.

Some of them are planar textures (not a 3D model): flowers, mushrooms, bushes, and juncus.
This is a nice idea that fits in this cartoon world, besides the fact that you don’t need to use so much geometry :)

Input Controllers

From the beginning we have designed the game to be played with keyboard+mouse or gamepad. Due to the availability and support, we started working with a Xbox360 controller.

Although it is a Tower Defense game, its gameplay is like any Dual Shooter game, so the actions should have been integrated in an easy way in a gamepad.

The keymap that Guru’s Adventures uses is the following:

Main Menu Interface Design

The Interface Design was hard, because neither Zopokx or I had experience with that.

Using my abilities as a web designer, I tried to make the menu easy and cool.

Menu MockUp

This was the first mock-up of the main menu. It’s simply, the logo at the top and the buttons with the options at the front.


And this is the final result ingame without the logo (we’re still working on that). The background is like the wall-paper of a kids room and the clouds give some life because they are moving all the time.

The music also helps to give a child enviroment. Incompetech has done a very good work with this song.

OnRail Enemies

Today we are going to introduce you our OnRail Enemies designs. They are vectorial images (SVG) and have been made using Inkscape.

We decided that every enemy should be simple: no shadows, no gradients. Plain colors with a dark colored edge.
But each enemy should have variants, like an evolution. In game, the variants will result into more strength or speed.

The artist did a first design attempt with handwritten edges, but the design was remade using a steady line.

Here’s the rest of our family of monsters.
Each one of them will have a special ability: harder, faster, sneak factor…

Do you like them? Who is your favorite one?

Coin Drop System

To design the drop system, we decided to wink to other videogame series. In this case, we are using the same colors and values that exists in The Legend of Zelda with the rupees.

Although there are some differences between them, the most common values used in tLoZ games are these:

  • WW_GreenRupee Value: 1
  • WW_BlueRupee Value: 5
  • WW_YellowRupee Value: 10
  • WW_RedRupee Value: 20
  • Purple_Rupee_TWW Value: 50

In this game we decided to use a button as currency.

The Coin Drop System works in the following way:

  • Aggro Enemies drops coins.
  • Each Aggro Enemy has 2 variables that determine the minimum and maximum value of the coins that can be dropped.
  • The coins are generated automatically taking the value randomly among the 2 previous variables (minLootValue, maxLootValue). The color is also assigned automatically.

You can check the code here (Unity3D C#):

int[] coinValues = new int[5] {50, 20, 10, 5, 1};
int lootDrop = Random.Range(minLootValue, maxLootValue + 1);
for (int i = 0; i < coinValues.Length; i++){
	if(lootDrop >= coinValues[i]){
		for (int j = 0; j < (lootDrop/coinValues[i]); j++){
			coinPrefab.GetComponent<Coins>().moneyValue = coinValues[i];
			Instantiate(coinPrefab, this.transform.position, Quaternion.identity);
		lootDrop = lootDrop%coinValues[i];

With the coins, the player can build towers or buy improvements in the shop.