Lesson #1: Don’t Overscope…

Hey Everybody!

It’s been another busy week, but I wanted to give you the scoop on my most recent project and some important lessons learned in the past week.

This week’s game project was a platformer I call ‘Elemental’:

ElementalScreen

If you’re not familiar with the name ‘platformer’, just think Super Mario Bros.  That’s the basic idea.

WindRunScreen

Look at that incredible character design!

Now, with my first math test this week and a bunch of other assignments coming due, I had less time to work on this game than the last.  However, I foolishly developed a design that required far, far more work than I initially realized.

The basic premise of my game is that the player’s character takes on attributes of the environment when they touch it.  For example, if the character steps into fire, the character lights on fire.

Firerunscreen

And that photorealistic mountain in the background!

The mechanic is designed to give the player new abilities and weaknesses.  The fire character can throw fireballs and melt ice, but dies if it comes into contact with water while still in fire form.  Great idea, huh?

Not so much.  This required waaaayyyyy too much work to implement in such a short amount of time.  In the screenshot below, you get a view of the program I’m using to make the game, called the Zero Engine.

ZeroScripts

It’s a little hard to see, but you see that long list I circled in the top right corner?  Those are my scripts, or pieces of code I wrote to get my game to work.  You can see one of my scripts below.

Code

This isn’t a huge list compared to most games, but it is a great deal when you have less than a week to get it all together.  For all those scripts, I was able to make my character have a fire state, water state, and wind state, and game over conditions for fire and water.  I can change my animations for each type, and my fire and water state can both throw projectiles – fireballs and water drops.

However, the only projectile that does anything is the fire, because it can interact with ice.  The water drop projectile does nothing at this point.  I also never got a chance to implement the idea that my character would melt ice if he touches it.  Or a status indicator for the player on my HUD.  So for all those scripts, I ended up with a partially complete game and discovered how tough it is to make players understand a region when it isn’t visually identifiable.

The blue boxes?  That’s water.  Mostly.  There are a couple of exceptions.  The red box to the left of the player is fire.

WindRunScreen

Visually stunning, right?

There is a silver lining though.  First, with my attempt at complex design, I exceeded the requirements for the assignment itself, which was more focused on implementing certain specific checkpoints, like the start screen I had at the top of the post, or getting my character to move in a physics based world.

Second, I learned the importance of keeping an idea simple and focused.  This assignment took me more time to brainstorm, and ultimately, I think it could be an interesting project.  But I needed to understand how much more involved it would be from the get go.  I probably would have done something simpler that would have ended up being more fun to play.

Going forward, we begin our team project phase, which will involve building a much more serious and complete game over the course of the rest of the semester.  I’m sure I’ll have more than few interesting stories from that!

In the meantime, I’ll post a quick update about my book, and I’ll see you next week!  You can check out a quick run through of my game below.  The total length wasn’t supposed to exceed 60 seconds for a level, so it’s not particularly long:

 

One comment to Lesson #1: Don’t Overscope…

  • Wes  says:

    It’s exciting to see you building these games! I look forward to your Blizzard killing release at the end of the semester!

Leave a reply Cancel reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>