Tuesday, October 7, 2014

And the Fate of Timey is...

DIED




We had a good run and came up with a pretty fun game idea, but in the end it just wasn't enough to get us through. Here is some of the feedback we received on what hurt us:

1. There are a lot of time games out there.
2. There was another game pitched that ended up having a very similar mechanic to ours that caused them to wonder why both of these were pitched as two separate games. (Both were cut)

I think one thing that hurt us that they didn't point out is we spent too much time focusing on what the mechanic was when we started developing the prototype, and only spent a small amount of time thinking about how the gameplay would use the mechanic in fun ways at the very end just days before our final pitch. Emphasizing those things would have really helped us highlight how this was different than other time games out there and how exploring what we were doing could be really fun and different from games like Braid.

The experience was a lot of fun and I was able to learn a lot of cool things, but now it's time to pack those lessons into my hat and move on to the new project that will be my life until I graduate.

So what will I be working on when all is said and done?

Introducing....

Melancholy Music

I'm very excited to be working on this game, it was my second choice if Timey got cut because there is a good chance I'll be able to mix my software engineering background and songwriting background in a fun way with this game.

So what is it?

It's a game like bit trip runner mixed with guitar hero and The Misadventures of P. B. Winterbottom.

Essentially, you run down a platformer path, you can choose from several paths, and each path has different musical tracks associated with it. When you reach the end, you start over, and the first run you did is still there but you can take a different path to create more musical tracks that mesh together.

Should be fun, and I'm excited to be working on it!

Saturday, October 4, 2014

Prototype - Timey Industry Panel Pitch!

So we made our industry panel pitch and the fate of Timey is now in their hands and the hands of the professors. I think Timey has a great chance but I can't help but be nervous as 3-5 games will get cut out of the 9 that made it this far!

The industry panel gave us a lot of great suggestions for different types of game-play we can use to make this game more fun and I'm definitely excited to sit down and design and complete a game with their suggestions added to what we've already got.

We had a lot of people work hard on this prototype and we were able to showcase some game play with some great looking art, and fully functioning time mechanics. Our team really came together at the end to come up with ways to make our game fun that really helped us in our pitch.

Here is our game-play video made by our awesome team that worked so hard to get it going even though they all have busy schedules.



Friday, October 3, 2014

Prototype - Water Droplet

A lot has happened in our prototype since my last post in preparation for our game pitch to a panel of industry experts.

I've been busy building a level showing a puzzle potential with our game mechanic with having water droplets drop into buckets in the past to have the buckets rust and open up new areas in the future.

In this post I'll talk about one mechanic I put together for water droplets. I didn't have time to do some kind of splash animation when the droplets collided with something, but I wanted to have something happen more satisfying than simply disappearing.

First things first, I made a water generator object, and put it where I wanted the water to spawn.


Then off the screen, I added a droplet sprite based off an image I found online, and set the RigidBody2D gravity scale to 0 on it to make sure it didn't move anywhere during the game.

Now I needed the water generator to periodically spawn a drop of water, to produce a leaky faucet effect. To do this I attached a script to the water generator and using my brilliant intellect, I named the script "WaterGenerator."



This script uses the update method to check how much time has gone by and spawns whatever sprite you specify at the location of the generator using the Instantiate method. It then stores the instance of the spawned sprite, although for my purposes I don't think I ended up needing to do that and could probably get rid of that collection here.

The last line also sets the gravityScale to 1 on the water droplet sprite to make sure it falls after being created.

So far so good! So the water falls, and with a Polygon Collider 2D it collides with objects... but that's not really what I wanted.

I could have the water droplet be destroyed whenever it collides with an object but that really isn't satisfying enough for the prototype. I didn't have time to figure out how to do a fancy splash animation either.

So instead I decided to add a script to the water droplet to have it shrink for a few seconds when colliding with something until it disappears.

First the class variables:



    public class WaterCollision : MonoBehaviour {

 public float disappearTime = 1.0f;
 private float scaleMultiplier = 1.1f;
 private bool started = false;
I wanted to readily have control over the amount of time it took for the water to disappear, so I made disappearTime public. The scaleMultiplier adjusts how quickly the water will shrink, and the started variable allows me to keep track of two states of the water droplet before and after it begins it's path to death!

After experimenting a bit with OnCollisionEnter and OnCollisionStay, OnCollisionEnter seemed to be the place that consistently did what I want, although there were some occasions where my water droplet wouldn't fully destory and that probably could have been fixed by adding code in both places.


    public class WaterCollision : MonoBehaviour {

 void OnCollisionEnter2D(Collision2D collision)
 {
  if (!started) {
  
   disappearTime = Time.time + disappearTime;
   started = true;
  }
  StartDestroying ();
 }

This is pretty straight forward, if the object hasn't already started to be destroyed, just set the time you want it to be destroyed and then begin shrinking the thing.

Here is my StartDestroying method:


    public class WaterCollision : MonoBehaviour {

 private void StartDestroying()
 {
  gameObject.transform.localScale = gameObject.transform.localScale/scaleMultiplier;
  
  if (Time.time > disappearTime) 
  {
   Destroy (gameObject);
  }
 }

In the interest of time I made this as simple as possible, just scale the droplet down by dividing by a value greater than 1, then check if enough time has passed to destroy the object.