Monthly Archives: November 2010

Personal Goals Update

My first post on this blog was about my current goals, and thus far I’ve stuck to them. Not only that, though, but I have a clearer view of how I want to go about things!

1. Learn Lua

I’ve been following along with Programming in Lua, a free book available on the official Lua website. My goal is to get through most of it by the end of the week. I’ve been considering doing a small project to get some practice with the language; I’ll probably make a hangman game. Hangman would allow me to work with a lot of the language’s features, and it’s simple enough where I’d mostly get caught up on language-related errors (which is what I want) rather than messing up algorithms.

Regarding the book, I’m actually pretty impressed by it. I’m strongly considering grabbing a print copy once I get a chance.

2. Get a taste of DirectX

Though I haven’t started this one yet–I’m waiting until after I’ve gotten a grasp of Lua–I’ve got a better idea of what I’d like to do:

  1. Learn Lua
  2. Jump into DirectX using C++ with tutorials
  3. Create a 2D arcade game using C++, DirectX, and Lua scripting.

By doing all of this, not only would I (hopefully!) learn DirectX pretty well, I’d also walk away with a cool game and a solid portfolio piece! Most likely, the arcade game would be based on something simple (Asteroids? Space Invaders?), but jazzed up with particle effects and the like. I’ll probably work toward this a lot over our holiday break from school, and hopefully I’ll be finishing it up before winter courses are done.

Longer term, I’d also like to try creating either a fighting game or strategy game. Also on the list is learning 3D with DirectX.

3. Stay up to date on Games Industry news

I seem to have found the perfect solution with Google Reader. This goal is something I have tried to accomplish a few times, but I just couldn’t get checking news sites into my daily routine; however, being able to get the latest updates of various news sites, comics, etc. all in one location has led me to checking Google Reader regularly. I’m currently subscribed to Gamasutra, The Escapist, GameCareerGuide, and a number of other sites. I really wish I’d discovered RSS readers earlier!

4. Play/analyze new games regularly

I’d like to incorporate this into my daily routine at some point, but for now I’m only pushing towards getting this done every other day. Finding and analyzing games is simple enough–I have a bunch of unplayed games, friends to borrow games from, sites like Kongregate, etc.–but doing write-ups is a bit harder.

Although I’d planned to post a write-up for every game on this blog (and I’ve posted one already), I’m not sure how feasible that will be. I definitely plan to do write-ups now and then, but with the amount of time it takes to do a good write-up (rather than a jumbled list of thoughts from my notes), I don’t think I’ll be doing one for every single game I try. I’ll probably be experimenting a bit with different formats to see if writing up something a little less formal is doable.


 

Finally, I highly recommend the site Remember the Milk, a free to-do list manager. I’ve been using it for the past couple weeks, and not only has it been awesome for keeping track of everything I need to get done, I’ve also been significantly more productive! Between daily reminders and being able to set deadlines that I’ll actually be able to keep track of, it’s been a godsend.

  • Learn Lua – I have heard nothing but good things about Lua, and it seems to come up frequently with games. When one also considers that the first edition of Programming in Lua is legally available for free online, teaching myself the language is definitely something I plan to do in the near future!
  • Get a taste of DirectX – Having worked in XNA, and after getting a brief introduction to OpenGL, introducing myself to DirectX seems like the next logical step. Although I don’t plan on attempting to master it in the immediate future, I would like to learn the basics and reach the point where it does not intimidate me, at the least :)
  • Stay up to date on Games Industry news – I’ve been making a point to read Gamasutra and The Escapist daily to stay on top what’s going on in the Games Industry
  • Play (and analyze) a new game at least every other day – In an effort to both improve my knowledge of what games are out there and to improve my ability to analyze games, I’m going to push myself to play and analyze a new game at least every other day. If I can spare even 15-20 minutes every day or two to trying out a new game, I should definitely be able to pull this one off. I also plan on posting my analysis of the games on this blog!

Analysis: Great Dungeon in the Sky

Great Dungeon in the Sky is available for play on Kongregate.

Brief Game Overview 

The main menu screen

Great Dungeon in the Sky is a platform game in which your goal is to go from level to level, looking for four dragons which you must kill to unlock entering the final boss’s level. Additionally, every new enemy you kill unlocks playing them as your character.

First Impressions

Great Dungeon in the Sky is easy to pick up quickly. Within a minute or two (and checking the short instructions on Kongregate), I was able to figure out how the game worked and what my goals were. The controls are simple: arrow keys to move, and Z/X/C to activate your abilities. Despite this simplicity, the controls are still a bit unintuitive; which abilities are assigned to which key feels rather arbitrary.

Gameplay

Great Dungeon in the Sky ran completely bug-free for me, and the gameplay was quite easy to get used to; however, there were a number of glaring flaws. The enemy AI for every enemy, including bosses, was effectively the following: “Walk back and forth along the platform. If the player moves nearby, or if the player attacks, perpetually run toward the player and attack repeatedly until either the player dies, or this unit dies.” Some enemies with ranged attacks would stand back a few tiles and shoot; any other enemies just keep charging toward the player, endlessly swinging. There was no real variety beyond that.

Because of the AI clinging to you so tightly, and because almost every unit moves at the same speed, there’s no real chance for developing a play style or improving your skills. In almost every situation, the best strategy is to stand still and use the same attack ad infinitum. I was even able to defeat every boss on my first attempt this way without getting hit by all but one. To be fair, there is one option I found that requires some skill: projectiles shoot at an angle depending on your character’s vertical velocity, so you can experiment with bank shots; however, this quickly gets repetitive and it is simply much faster to walk up to the enemy and bash it to death.

Although the game plays more or less exactly the same an hour in as it does in the first five minutes, there is some variety present.  For example, although most characters are unlocked by killing the equivalent enemy, killing a dragon only unlocks its egg. You hatch the egg, giving you a young drake which then evolves into stronger and stronger forms as you kill more enemies. As another example, in most levels a pit simply leads to another section; however, in one level, this brings you back to the beginning (though this could easily be considered as inconsistency rather than variety).

Finally, there is an “HD Graphics” option which implements some fun visual effects like motion blur. Unfortunately, this mode looks quite unappealing as everything is constantly blurred by your movement and enemy colors are washed out by the reddish tint. The artwork was clearly designed without HD Graphics in mind.

Characters

Jumping into the game, I was awestruck by the quantity of characters. To be more precise, there are probably around 300 of them! (Getting an exact count is tough, because some characters take up more than one spot on the character select grid.) You start with 32 characters unlocked: 16 unique characters with male and female equivalents.

Screenshot of Great Dungeon in the Sky's character selection screen

Lots of choices!

Unfortunately, most of these characters are very similar. All of them use different combinations of the same small handful of abilities, and to make matters worse, at least one (Living Statue) was completely unplayable as it could not move. Furthermore, there is no real sense of balance among all of the characters. The starting characters are somewhat in line with each other (with a few outliers), but everything quickly gets out of whack with all of the unlocked options.

Adding to the imbalance is the level design: every time you enter a level, it is picked randomly from a set of pre-made layouts. One level has an almost-unavoidable section with a large number of units in it that will brutally destroy you if actually try to fight rather than keep running, another is a straight shot forward from beginning to end. Thankfully, levels vary greatly in layout, but the lack of quantity causes one to see the same levels over and over. Flying characters can fly their way through every single level, ignoring everything; however, this is a bit of a boon once  you’ve seen the same levels five or more times each.

Conclusion

Conceptually, Great Dungeon in the Sky implements a number of interesting ideas! In terms of execution, however, the game falls short in a number of areas. There are some interesting mechanics present, but nothing new really presents itself past the first five to ten minutes of gameplay. Others have enjoyed the game, but I found it lacking in challenge, balance, and variety.

Learning Lua

Sticking to my plans, I’ve begun teaching myself Lua. Although it’s a bit odd to wrap my head around after just diving head-first into C++, it’s pretty cool!

One lesson I’ve learned (or, rather, had reaffirmed) is how important writing clean code is. Given Lua doesn’t require semicolons to separate statements and doesn’t use braces, you can get away with some really sloppy, hard-to-read stuff. The following are all equivalent:

-- Easy to read factorial function
function fact (n)
   if n == 0 then
      return 1
   else
      return n * fact(n-1)
   end
end
-- Hard to read, but simple enough where you could probably figure it out
function fact (n) if n == 0 then return 1 else return n * fact(n-1) end end
-- Oh boy.
function
fact
(n) if n ==
0 then return
1 else
return n *
fact(n
-1) end

end

Having only really worked with C#, C++, Java, and ActionScript, it’s going to take some effort getting used to the syntax of Lua; however, I’m up for the challenge!

Current Goals

With fall quarter classes coming to an end, I’ve had time to unwind and start thinking about my current short-term goals:

  • Learn Lua – I have heard nothing but good things about Lua, and it seems to come up frequently with games. When one also considers that the first edition of Programming in Lua is legally available for free online, teaching myself the language is definitely something I plan to do in the near future!
  • Get a taste of DirectX – Having worked in XNA, and after getting a brief introduction to OpenGL, introducing myself to DirectX seems like the next logical step. Although I don’t plan on attempting to master it in the immediate future, I would like to learn the basics and reach the point where it does not intimidate me, at the least :)
  • Stay up to date on Games Industry news – I’ve been making a point to read Gamasutra and The Escapist daily to stay on top what’s going on in the Games Industry
  • Play (and analyze) a new game at least every other day – In an effort to both improve my knowledge of what games are out there and to improve my ability to analyze games, I’m going to push myself to play and analyze a new game at least every other day. If I can spare even 15-20 minutes every day or two to trying out a new game, I should definitely be able to pull this one off. I also plan on posting my analysis of the games on this blog!