Tuesday, September 21, 2010

Three Lessons Learned

So I think I mentioned in my last post (two months ago?) that some buddies and I were working on a tower defense game that we hoped to demo at an upcoming conference in September. As you may have noticed, September has almost come and gone but I haven't posted any stellar updates detailing the success of our demo at said conference.

Part of this is due to an unavoidable stall in development progress, which brings me to my first lesson learned. When I realized the ever-increasing scope of the game I would soon be writing, I should have pulled in more developers. As it is, I am currently the only programmer among a group of two 3D artists, two concept artists, and one musician. Although there is a certain amount of pride in being able to take full ownership of the (increasingly large) code base, there is also much to be said for having a fellow to bounce ideas off of and having someone to share the load when you're not available.

Another thing that's bitten us in the development of our game is not understanding core requirements in the beginning. We think we have a great idea for a game and started prototyping the basics right away. For a simple tower defense game, you have enemies moving from one end of the screen to the other, and that's what we created initially as a 2D game. Once we had this basic prototype, we realized that it was pretty darn difficult to make projectiles with faux-depth in a 2D isometric view look right. So we had to make the leap to the third dimension, which involved converting our 2D sprites into 3D rigged/animated/textured models. We started creating 3D animated models right away before adding concept artists to the team; so the models had to be recreated. But once we had our concepts, we needed to make specific decisions regarding Art Style - the overall game appearance - and this required new models yet again. As a programmer I occasionally overlook these finer details; I mean, if all the characters on screen are moving to their correct destinations... it looks good! But the second lesson I've learned is that Art Style is something that should be seriously considered early on in a game's development.

Performance is also a major consideration for our game. Although we want to have the best-looking game we can build, we also want it to be playable for as many people as possible, so limiting it to the highest-end graphics cards didn't seem right. And given the fact that I was developing the game on a laptop with only 32MB of dedicated video memory at the time, I had a big problem creating a game I wouldn't be able to play! So we took a step back and realized that our 3000-polygon models probably weren't going to cut the mustard. But even with reduced-poly models, we wanted to do some fun stuff in our game like using outlines on our toon-lit models, particle effects, etc. And some of these special effects are expensive operations that quickly drop frame rate and can cause the game to lag. So as our designer likes to say it, the final lesson for today is to "prototype everything." Although he doesn't really mean to prototype everything. What should really be prototyped is all of the core systems of a game that could be rendered/executing together at the busiest point of the game's interaction: music, sound effects, lighting, particle effects, blur effects, and so on. And provide a way to instantly, with the push of a button, drop a hundred or more models on the screen to simulate the game at its most computationally-intensive point to see how it will perform in the worst-case scenario. Doing this type of prototyping early on can help identify where you need to save polygons or cut features that could prevent your intended audience from playing your game.

The cool thing about my team is that we're all learning as we go, and sometimes part of that involves looking back and saying "You know, we could have..." So I hope this helps as you start your next project.

Sunday, July 18, 2010

Concept Art

As mentioned previously, I've been working on a fairly complex tower defense game for about eight months now with some very talented 3D and concept artists. Although I'm not at liberty to disclose full details of our upcoming game, for which we've set a demo deadline of September 2010, I can show off some concept art. As a programmer, I'm learning the importance of having quality, researched concepts from which our 3D artists can generate models that are animated in the game. Below are a couple defense units and a couple enemies to show a small piece of what we're working on.

Defense: Light Infantry
The light infantry in our game is the player's first line of defense against attacking enemies. He wields a javelin and is a bit clumsy at first but improves his skill (e.g. throwing more than one javelin at once) when upgraded using cash earned from killing enemies.

Defense: Heavy Infantry
The heavy infantry does more damage than light infantry and attacks rapidly in a wild rage when upgraded. A couple possible renderings are shown.

Enemy: Cyclops
The Cyclops is one of the boss enemies in the game.

Enemy: Minotaur
The Minotaur is another boss enemy in the game.

So those are just a sneak preview of some of the artwork going into our tower defense game. Note that this work is copyrighted by Insert Coin Interactive and may not be copied or reproduced in any way. I look forward to showing more work and hopefully also some in-game screenshots when we're closer to demo completion!

Thursday, July 15, 2010

Making Games on the Side

As a hobbyist/indie game developer, I found the following Gamasutra article of particular interest. It describes some of the challenges and sacrifices required to be a successful game developer, whether your definition of "success" is actually breaking in to the industry or simply making games for the love of doing it. Hope you enjoy the article as much as I did.

Making Games On The Side: Development In The Real World

Thursday, July 1, 2010

Exciting Announcements!

I can hardly believe it's been two months since my last post. Where does the time go?!? I haven't been posting lately but have a feeling that will change soon. And I have a lot of exciting announcements I couldn't wait to share!

First, and I know I promised not to use this blog as a personal forum, but I simply must share that my wife and I are expecting our first child! She is actually due to arrive today, so please cross your fingers, wish us luck, and if you are inclined to do so, pray for us and our baby girl. If you're interested in more updates please feel free to add me as a friend on Facebook.

Second, I just discovered today on the IGDA NC forum that EA is hiring software engineers for full-time and contract positions. The NC branch of EA is located in Morrisville, so if you're a game developer living anywhere near the Triangle click the link above and submit your resume.

Third, I learned recently that Ian Schreiber is doing another summer online course, this time focusing on Game Balance. If you enjoyed his Game Design Concepts course you will most likely be interested in checking out Game Balance Concepts.

Fourth, check out Darius Kazemi's GameLoop unconference. It looks like an awesome time to learn about all things game-related, so you should totally check it out if you live anywhere near Cambridge, MA.

Finally, I've been working on a tower defense game that I alluded to way back in January and I'm happy to say my team and I are making outstanding progress. But a number of things have changed. Instead of it being a 2D game, we're now doing 3D (and understand why 2D isometric tower defense is near-impossible). We've also switched our platform from XBox 360 to the PC, and are making some dramatic changes to our original art style. It's amazing to see what our graphic artists can do, and I plan to post some screenshots soon. Tentative plan is to have something we can demo at an upcoming conference in September.

So there's a lot going on, which hopefully explains the fewer posts, but I have been learning a ton of cool stuff that should make for some interesting tutorials right here on GDJ. Until next time...

Saturday, May 1, 2010

IGDA Takes a Stand on Censorship

I just read an awesome post on GameDev.net titled IGDA Condemns Video Game Censorship and think it's awesome to see the IGDA taking a stand on censorship like this. I totally agree it is the responsibility of parents, NOT the government, to determine what children should and should not play.

So yeah, check out the post on GameDev.net, cuz it's awesome.

Friday, March 19, 2010

Happy (Belated) Birthday, GDJ!

It's hard for me to believe this blog is one year old this week. I started writing last March 14th, not quite sure where the journey would take me, and now it seems a whole year has passed so quickly. One thing is for sure, I have learned a LOT about the game industry through numerous news feeds I now read almost daily and from the extremely bright folks over at the Game Career Guide forums. I've dedicated a large amount of effort to learning how to write games, have gotten involved in my local IGDA chapter, and have met some really cool people in the process.

I created a very basic Pong Clone in 24 hours, worked in a team to create the puzzle game Befuddled at the Global Game Jam in a single weekend, and am currently working with some amazing artists to create an exciting tower defense game. This latest project is one of my biggest and best endeavors yet, so I'm very excited to see the end result within a couple months.

Tuesday, March 9, 2010

On the Eve of GDC...

I figure it only fair to post a comment stating my jealousy of those attending Game Developer Conference in San Francisco this year. You will, no doubt, flood the web-waves with your tweets, blogs, facebook posts, and other streams with tremendous amounts of information that no human being could possibly absorb within the scope of a single day, week, or even a year. You will meet countless industry professionals, students, amateurs, and hobbyists alike, hopefully by the end having learned something about the way others think, approach problems, and resolve them in ways you might never have conceived. My hope for you is that you understand the opportunity before you; that you grasp the amount of knowledge with which you will be surrounded; and of course that you share it on afore-mentioned media so those of us at home can live through your experiences vicariously.

Tuesday, February 16, 2010

XNA Frustrations

I've been working on a tower defense game in XNA (C#) lately. I like that XNA simplifies a lot of tasks, which means I can write less code than I typically would in a C++ game. For example, I can make a simple spriteBatch draw call to get a texture on the screen without creating my own vertex/index buffers. Or I can create the view and projection transformation matrices with a single utility method. XNA handles window creation and setup with very minimal code and generally makes the process of creating a 2D game a very simple task.

However, creating a 3D game with XNA is a completely different beast. One thing I've beaten my head against is lack of support for animation out-of-the-box. XNA apparently has some classes at a very low level, as described by my buddy Priyank over at eNtropology Games. XNA Animation Component Library looks promising, though I have yet to play with it. And then there is the XNA Creators Club skinning sample that implements runtime animation classes for a skinned model.

But my latest frustration concerns the lack of something much more basic than animation; I can't create a sphere in XNA! Some folks have created their own classes to implement a sphere as a game "component" object, but what I really need right now is a class that can be instantiated dynamically so I can preview my bounding boxes for collision detection. Naturally C++ has simple utility methods for creating the basic meshes: cubes, spheres, cylinders... even doughnuts and teapots! But no such luck with XNA yet, and the most annoying part is that I'm wasting time trying to render a sphere when I should be doing more important tasks, like making sure my models can avoid walking through each other.

It seems XNA is more of a toy than a tool for serious game development, and I think in the future I will be limiting my use of it to more basic projects. But for now I press on, forced to create innovative solutions (translation: hacks) to make it work... grrr....

Sunday, February 14, 2010

Carolina Games Summit 2010

"Making a game is like shooting a movie while you're building the camera."
-Shaun Peoples, Ubisoft's Red Storm Entertainment

Since our arrival in North Carolina six months ago I've had the pleasure of attending three game industry events: an IGDA meeting, the Global Game Jam, and the Carolina Games Summit (henceforth referred to simply as CGS). Participating in these events (not simply attending) is particularly exciting for me because it means I'm making progress on that whole networking thing I admitted I needed to work on a while ago. But this post isn't about networking; Darius Kazemi already has an amazing blog to help you out with that. I figured I'd take a few minutes to describe my experience at CGS, which took place February 6th at Wayne Community College in Goldsboro.

The day started off rough. I woke up late and, giving the expected minor snowfall I almost considered not going. Since it rarely snows here, people spaz out when it does and the news folk generally recommend not driving at all. But in addition to wanting to go, I had my friends Wes and Andrew counting on me, so I rushed over to pick them up. To my happy surprise, Wes offered to drive and the snow held off. We arrived a little before noon, when the first speaker session started. Numerous game tournaments were scheduled throughout the day on the second floor, but we were there primarily for the educational sessions.

The first session at noon titled "Wow, That Was Cool! Wait, What Was That?" was presented by technical artist Jason Connell and software engineer (programming) Shaun Peoples of Ubisoft's Red Storm Entertainment (Rainbow Six, Ghost Recon). Unfortunately due to a scheduling snafu (more on this later) there was a delay while the coordinators attempted to find our speakers, so we were treated instead to a Q&A by Ben and Stefan from Electronic Arts. Responses of interest to me were the importance of being good at something specific but also being agile and also the fact that even a giant like EA outsources some art/engineering.

As the session proceeded, the scheduling glitch was somehow resolved, as Jason and Shaun stepped in to give their now-quickened presentation, which gave good insights on the daily life of an artist or programmer in the industry. I took a lot of notes here but will summarize the key points for programmers:

  • Knowing the hardware helps you write more efficient code and stay competitive.
  • Be passionate... but also realize you will never make "your" game.
  • Knowing engines helps you understand what your competition is doing.
  • Expect constant changes during the development process; you will work on different things from day to day.

The next session we attended, titled "Landing a Job in the Game Industry", was presented by Ryan Stradling, the Senior Development Director at EA in North Carolina. I found it interesting that EA NC only has nine employees, and they've worked primarily on NASCAR titles at this point. This session covered most things I've heard before: create a complete game, be a team player, get experience any way you can, etc. But I learned some new stuff too. For example, did you know the game industry reels in $8.7 billion each year in the US alone and $24 billion worldwide? Ryan also gave these insights to making it 10+ years in the game industry:

  • Accept change
  • Accept that fun is an elusive target
  • Be motivated and passionate.
  • Continually learn, pushing yourself and others
  • Love what you do, and do what you love!

Mr. Stradling was very down-to-earth and willing to chat with attendees after his session. So I was able to meet him, ask a couple questions, thank him for his presentation and shake his hand. His advice to me directly, as a programmer, was to "Know your stuff!". This was definitely the highlight of my day.

My friends and I attended two more presentations, one by an indie developer on the challenges of starting a game company and another by a lawyer on the top legal pitfalls of game companies. I took more notes but will save those details for a later date since this post is getting long already.

Unfortunately the CGS did not seem well-organized, due to the initial presentation confusion and meager dining options. We went with the barely-warm Chick-fil-A over the $2 per slice of Papa John's pizza. Also the fact that all sessions were in the same room and scheduled every hour on the hour (with no breaks in between) meant some sessions ran over and others had to start late. But for the sake of education and networking opportunities, I'd still have to say it was a worthwhile experience.

Next up? The Triangle Game Conference is coming April 7-8th...

Tuesday, February 2, 2010

Global Game Jam 2010

Befuddled Game I had the unique opportunity to participate in the Global Game Jam this past weekend, January 29-31. The GGJ is a 48-hour, world-wide game creation marathon. Creating a game is no easy task, let alone doing it in such a shortened timeframe. But we did create games, many of us in small groups across the world, and it was truly an amazing experience to be part of this global event!

The Triangle Game Developers division of the Global Game Jam started off at Icarus game studio in Cary, NC on Friday the 29th at 4:30pm. Unfortunately, due to snowy weather we were not able to remain at the studio location for the entire weekend as planned. We had just a few hours to get together, meet our peers, view the keynote speech, and then get started by discussing game ideas and forming teams. After a short period of discussing our game with our new team members, we left for the evening with everyone's contact information in hand, and that's when the real fun began.

This year's theme was Deception. We had to think up game ideas incorporating some means of deception and, as an additional requirement, had to include one of the following three items in the game: a pet, a set, or a net. The idea our group settled on was a type of Bejeweled clone where players secretly choose the gems they use to score points and can also sabotage each other! Our game is called Befuddled and can be downloaded here, along with other games from the Triangle Game Developers.

One thing I learned from this event is that it takes a LOT of work to complete a game. And a lot of communication. In fact, I think that's one of the things my group did particularly well. One of our team members set up an IRC channel so we could all communicate real-time, and we were mostly connected the entire 48 hours for making design decisions, asking questions, and just chatting in general. Another thing we did really well was picking a simple game idea. It started very basic, but we were able to add on to it, giving it new visual styles and gameplay features as we went along.

One problem we had throughout was, with a basic game, trying to add the right things to make it fun. We know it still needs more playtesting and iteration to figure out the missing "fun" factor. But the best and most exciting part of it all is having something we can call a complete working game. Of course nobody stayed up the full 48 hours, but some of sure did try, and we're all very proud of our successes on this project!

Be sure to check out Befuddled and a ton of other Global Game Jam games by visiting the Global Game Jam website. You can also search Twitter for #GGJ to see posts about GGJ games.

Sunday, January 17, 2010

More Exciting Events in NC!

So I've already mentioned the Global Game Jam, occurring January 29-31, in my previous post. Since then I've learned of two more exciting events coming quickly, so if you live in NC be sure to mark your calendar!

FEB 6: Carolina Games Summit
This one-day event, sponsored in part by The Escapist, takes place on Saturday, February 6th, at Wayne Community College in Goldsboro, NC. The day includes a number of lectures on programming, art, hiring processes, and more. Numerous game tournaments will take place throughout the day. Online registration is highly recommended; you may not be able to get a ticket just by showing up, so check out the website for ticket information.

APR 7-8: Triangle Game Conference
The second annual Triangle Game Conference takes place April 7-8 at the Raleigh Marriott City Center in Raleigh, NC. Dubbed the "leading East Coast event for developers and professionals working in the interactive entertainment and serious game industries," TGC is sure to be the area's top educational and networking event for those interested in the business of game development. This event was established by the Triangle Game Initiative to focus the Triangle area as a major hub of game development. If you live in the area, this is the event this year you don't want to miss!

Are you coming to one of these events??? Let me know in the comments! I'm more than happy to meet new people and look forward to making new friends. See you there!

Wednesday, January 6, 2010

Register for the Triangle Global Game Jam!!!

I just checked the Triangle Global Game Jam website and am excited to see this year's Triangle game jam will be hosted at Icarus Studios in Cary, NC! I have no doubt this will be a very exciting event. The Global Game Jam, hosted at over 100 locations across the world, is a 48-hour game-creation event designed to promote creativity, innovation, and community. The jam will take place January 29-31, 2010.

We need more participants, so make sure to SIGN UP!

Monday, January 4, 2010

Current Project: Tower Defense Game

I've noticed the guys over at Vortix Games occasionally take a hiatus from posting on their blog when busy with a given project. I think this is certainly understandable when you're part of a small team and would like to point out they have done a terrific job on their blog - definitely one to check out for some game development insights. And so I begin this post by admitting I've been doing the same... but hey, it's not so bad because I'm not the only one, right?!

At any rate, I would like to briefly mention the new game project I've been working on. A couple months ago I had the great pleasure of meeting a couple artists in my area, and we've since been working to design and build a Tower Defense game. For the uninitiated, gameplay consists primarily of setting up a series of defenses such as turrets or guns and then watching a flood of enemies attempt to navigate from their start position to a given destination. This is an entirely new game genre to me, but after having played a few games online (such as Whiteboard Tower Defense) and working on our current prototype, I'm excited to see how it will turn out. One thing is sure: with professional artwork it will definitely look better than my basic Pong clone!

This project has some interesting challenges. For example, it is entirely a 2D game; I've been learning 3D development for so long that it is a welcome switch of gears. It is also being developed for the XBox 360 using XNA Game Studio 3.0, which allows me to put my existing C# skills to use, just in a new way. I use C# every day for web development but this is my first experience with XNA. Even though the target platform is the XBox 360, I plan to make it playable on the PC as well.

I hope to reveal more about the game as our agile design/implementation/testing rounds progress. Keep an eye out for future posts, even if they're not terribly frequent. With any luck, the completed game will appear here for your enjoyment!