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.