Thursday, December 9, 2010

Crunch Time

Just a short post for today -- it's now nearly finals week here at DigiPen and everyone is working extra-hard to get their various projects and assignments done, myself included. I worked all weekend this past week to get my regular assignments done so that I would have more time for my CS529 final project, the game engine. I've now implemented nearly all of the required features and can spend time on adding new gameplay logic and other similar things.

Below is a screenshot of the game. I only took one because right now there's not much of note to show off. [All artwork and sound is also being done by yours truly.]

Right now, the game is designed around a simple Asteroids-type playstyle, but I'm working on expanding it to more of an open-world shoot-em-up. Since we got an extension on the project, I'd like to add some additional twists. For instance, with component based game objects, it should be a relatively simple matter to allow the player's ship to land at a space station and then spawn an astronaut that the player can then control.

To take it a step further, why not let the player enter a building and then transition to platformer-style gameplay? All this would require is slightly different logic for tilemap collisions and adding gravity, which is a simple matter. I would also have to create a  specialized controller component to handle the left/right/jump movement and controls, but that shouldn't be very difficult either. It took a while to transition the engine to a component-based structure, but the results are definitely going to pay off!

EDIT: Here's a shot with new artwork with a more vector-graphics feel. I feel like this fits the genre a little better. What do you think?

Friday, November 12, 2010

Grad School: Are We There Yet?

Short answer -- very nearly, yes.

The long answer: For the past couple of months, assignments in the class that I was most excited to take, CS529: Introduction to Game Development (this is what I'm at DigiPen for, right?), have been overly simplified "fill-in-the-blanks" affairs. Even for our most recent project, which involved developing a platformer (e.g. Mario, Sonic, and the like), wasn't sufficient to motivate me. Most of the functionality was already there and the biggest challenge was simply figuring out how best to avoid having the player fall into the floor. Granted, I could have taken the project much farther than I did, but the difficulty (or lack thereof) of the project combined with the fact that we had two weeks to finish it, which was far more than we needed, just wasn't doing it for me. Up until a week or so ago, I was still questioning whether it was even worth having come here.

However, there is light at the end of the tunnel. Recently, Chris Peters, the game programming guru of game programming gurus at DigiPen, took over the class. Having already been treated to his genius through sitting in on his lectures for the undergraduate game project classes, I was more than pleased with this development. Even better, though, was the assignment of our final project. We've been tasked with developing a simple game engine with a component-based design (more on that in a bit) completely from scratch... Okay, that's not completely true -- we have access to a sample game engine that would score roughly average on the project rubric. Still, I'm taking pains to make sure that I don't reuse any code without understanding exactly what it does and why it's necessary. Sure, this means I won't get the project done quite as fast as if I just copy-pasted, but what would I be getting out of it? I'd learn a little bit about it through trying to extend its functionality, but to really understand it, you have to take it apart and see what makes it tick. I should note that this is a solo effort, like our previous projects.

WARNING: Technical mumbo jumbo below. If it seems like I'm talking in Greek, skip ahead.
A big flaw with inheritance-based software design is that, when overused or used improperly (these are essentially one and the same), it creates tight coupling (i.e. interdependency) between the different parts of the program. This has a high potential of creating major problems when you need to extend or modify the functionality of the program. Changes to one part of the program cause a cascade of possibly unintended and/or unwanted changes in the rest of it. This results in a lot of headaches and extra work for everyone who worked on the new or modified feature and any other things that happened to be affected by its implementation.

The simplest solution to this is to prefer aggregation and composition ("has-a" relationships, i.e. "the game object has a physics component") over inheritance ("is-a" relationships, e.g. "the game object is a physical object"). By coding each major part or system of a project, such as a game engine, as if no other systems exist, and constructing objects so that they have components that utilize individual systems, we can vastly reduce the amount of interdependency. The resulting program is much easier to extend and modify, given that changes to one system do not directly affect the other systems.

Friday, October 8, 2010

"You may have been the best, but guess what? Now you're all average!"

Looks like it's time for me to do another post, seeing as I haven't done one in about a month. At this point, now more than a third of the way through the semester, classes are finally starting to pick up. We have a project due just about every week now in CS529, our game dev class, and quizzes and exams to keep us on our toes in CS525 (C/C++). That's in addition to the projects in CS525 and CS241 (graphics), which are due abou every two weeks. So, there's a lot of work to be done, but what else?

Well, after having our first quiz and exam for CS525, it's becoming apparent that this is the class that weeds out the unworthy. My performance on the quiz last week was... less than stellar... but I did considerably better on the midterm, which was yesterday. Apparently, so did everyone else. How do I know this, you ask? Our professor has written scripts that automate a number of things for him, such as testing and grading our code, and also generating statistics for the class based on our grades. And where am I? Right in the middle -- I'm completely and utterly average. Oh, and did I mention that our professor has failed a third of the class before? How's that for motivation?

When I got here, the Student Association president gave a speech about how, while you may have been the best at your respective schools, that means you're all just average at DigiPen. Listening to him talk about that and give  a number of other speeches, I assumed most of it applied more to the Freshmen. We're Master's students, we've already been through the gauntlet, right? Apparently, though, graduate school is hard. I know! Who'd have thought?

It's been a long while since I've fallen into the "average" category. Honestly, this feels more like high school. Although I was in the top 10% of my class, among the people in my Calculus BC class, my performance was pretty much right in the middle. And, what do you know, I got my first C in that class! Oddly enough, I don't think I got any Cs in college. This, of course, raises the question of whether I should have gone to a more academically rigorous and challenging university. One could argue back and forth forever about this, but I maintain that it was the right decision. While I may not have been challenged as much as I should have, I gained a lot in other areas, especially music, and made a great number of good friends. All in all, I'd say that my experience there made up for any of the aforementioned deficiencies.

And after all, I still got into DigiPen, right? Sure, I may be average, but I'm average in a group of very intelligent people, people I'd be proud to work with. Of course, this doesn't mean I can just sit back and let things happen. I have to be pro-active and hard-working and I absolutely must improve my time-management skills if I'm going to survive this ordeal. Soon, the real fun begins. I have just less than a week to make Asteroids, and pretty soon after that we'll be starting our main project, to create a platformer from scratch! And, for the record, I absolutely cannot wait for next semester when we start our first team project!


Wednesday, September 8, 2010

The Penny Arcade Expo: Reexamining My Values

As many of you probably know, this weekend marked the coming of the Penny Arcade Expo (PAX) to Seattle. Being one of the few lucky enough to have not just the opportunity to attend PAX, but no less than a 3-day pass(!!!), I of course decided to make the most of the weekend. Unfortunately, due to some failures in the planning ahead department, I ended up missing or not getting into about as many events as I actually attended. However, despite this, I learned a great many things. The most important of these pertain not necessarily to the ins and outs of the game industry, although I did gain quite a bit of insight in that department, but to my goals as a game developer.

It has taken me a good deal of time to determine exactly why it is that I want to work in the games industry and what I want to accomplish there. For a while, I told myself that I wanted to make games that would make people happy; just as with singing, if I could make one person's day a little bit better with the work that I do, I would be content. As it turns out, I needed to become immersed in an environment that was completely dedicated to video games before I could really figure out what I really wanted to do. On the first day, as I wandered through the exhibition hall I discovered that the booths for all of the big-budget "next-gen" titles held remarkably little interest for me. Granted, part of this was that I didn't want to waste time waiting in line since I had a lot of panels to go to and wanted to explore the entire hall, but there was something else, too.

As the second day of the convention progressed, I pondered all of the things that I had been learning. Later in the day, I chose to skip one of the panels I had originally planned to go to in favor of exploring the exhibition hall a little more thoroughly. Once again, I found myself less inclined to visit the likes of Bioware, Microsoft, ArenaNet, Bethesda, Gearbox (despite the promise of Duke Nukem returned from the grave), Square Enix, or even Nintendo,  and more attracted to the smaller booths of the indie developers. That was when it hit me: all of those flashy sequels, even with their new technological and gameplay-related bells and whistles, are the same games that I've been playing for the past 15 years. I don't want to make those games, I want to make something new and different. And the reality of it is that I more than likely won't get a chance to do that at a large development company that makes blockbuster titles.

To do something new, something that's not what most publishers of games would consider "safe," you have to go independent and, as I've discovered, I'm more than okay with that. For a good while now, indie games have been growing on me, and I really came to appreciate them over the past month. The fact is the most unique gaming experiences I've had recently have been with indie games. Where else but XBox Live Arcade, PSN, Steam, and the web can you find games about a boy made entirely of meat, or using black goo to build elaborate structures? One of my favorite experiences this weekend was playing a game where I used a Rock Band-eque drum set as a controller in order to kill zombies. Sure, it may end up being mostly a gimmick, but it's creative and original, which is more than I can say for most of the highly-anticipated AAA titles.

Ultimately, I think starting at a larger company and then eventually going indie with some friends would be my safest course of action, assuming I survive DigiPen. Given how much money I owe in loans, I really can't afford to take chances when it comes to my first legitimate job.

Now, I could go on for a long while about all of the panels I attended and the things I learned from them, and the games I saw in the exhibition hall, and the wild costumes that some people were wearing, but ultimately the inner paradigm shift that I experienced takes precedence over all of that.

None the less, here are a few other important lessons:
-You don't have to write a story to tell a story
-Execution of an idea is more important than the idea itself
-Indie game devs are much more friendly
(There are more, but I can't think of any others that stand out right now.)

And a few titles to watch for:
-BattleBlock Theater (from The Behemoth, the creators of Castle Crashers)
-Guild Wars 2
-Portal 2
-Super Meat Boy

Wednesday, September 1, 2010

Orientation, Part 1

I didn't think I'd have enough to write about after only one day of orientation, but it turns out I do! Yesterday was very informative. Between talking to some of the undergraduate students and the graduate student check-in/info session, I feel very much more "in the know" than I did previously. One of the first pointers that my roommate and I got from one of the undergrads was that we don't really need to know anything (initially) about game programming specifically to succeed at DigiPen. This in and of itself was somewhat comforting. It did become clear, though, from talking to some of them that these undergrads definitely know their stuff and it will be very beneficial to talk to them about game development.

From the graduate session, I gained a good deal of insight into what the next couple years have in store for me. I was initially under the impression that next semester's game project class was just going to be planning/prototyping a game, but as it turns out, it will be a full-fledged game project. If all goes well, I will have a working game by the end of the school year! How crazy is that? That being said, I'm definitely going to be working hard this year, especially next semester.

The advisor for all full-time graduate students and a third-year graduate student talked to us a little bit about the thesis and extra coursework tracks and what they entail. I learned that almost everyone who has chosen the thesis option has not graduated after the regular two years. We were also advised that, if we don't have a solid idea for our thesis by the time the second year rolls around, we shouldn't be taking that track. This makes me feel considerably less ashamed about gravitating, at least initially, towards the extra coursework option. Granted, the comprehensive exams won't be a piece of cake by any stretch of the imagination, but it seems like a much more sure-fire way (if there can even be said to be such a thing at a place like DigiPen) to graduate and to do it in two years.

I was also surprised to learn that one of the MSCS students, Jeff, is the computer networking instructor at DigiPen. The faculty want him to teach a graduate-level course in networking but, unfortunately, he doesn't yet have a MS or PhD, so he is currently unable to do so. Thus, they've decided to let him go through the MSCS program at DigiPen. This way, he can still teach his current classes, although I have a feeling that, even though he's doing the degree part-time, it's going to be a lot of work for him. Jeff warned us that if we end up having him on our team, he is not going to do the networking portion, seeing as he wants to learn something new. However, I understand that most graduate projects don't have networking capabilities, so this is probably a non-issue.

New insights into the way the program works has made the 33% graduation rate that I was given seem less horrible than I previously thought (what with a lot of people not graduating on time, or getting jobs and then not wanting to complete the program). Also, now that all of the second-year students have signed up, and there are 14 of them, it appears that the drop-off from the first year to the second isn't quite as dramatic as I thought. Granted, 6 out of 20 is still a fair amount, but it's nowhere near 66%.

Now my worries are more related to whether I can learn enough in the coming semester to prepare myself for working on a complete game project. Another thing to consider is, how do I choose a good team? We'll supposedly be working in teams of about 4 programmers. And if we succeed in making a game, will it be good enough to get me an internship? Regardless of what happens, though, I'm now thoroughly convinced that, within the next year or so, I will be learning more than I could ever possibly retain.

Until next time!

Tuesday, August 31, 2010

Life in Redmond / Project Mirror

I've now spent nearly a week in Redmond, WA and, while I still don't have any furniture for my room, it's been quite enjoyable so far. I don't think I'll ever get tired of all the evergreens and, while cloudy skies and rain are common, I don't find that it dampens my mood at all. Overall, the climate suits me much better than that of the Midwest.

Between the textbooks owned by my roommates and those in DigiPen's library, I now have access to all the materials I could ever want concerning game design and development and a number of other subjects besides. I've only read a couple chapters out of a book on Real-Time Rendering so far, but I expect I'll be much more motivated to pursue further studies once school begins in earnest. Today marks the first day of orientation for graduate students. I believe we're starting classes next Tuesday, but I could be wrong. In any case, I'm sure we'll be given all of the important details at orientation.

The thing I'm currently most excited about, though, is the Penny Arcade Exposition (PAX) this weekend. Between all of the panels on game design and development and other related subjects, the booths where developers get to show off their newest games, and the live music in the evenings, it promises to be one hell of a time! I'm going to have to make myself a schedule of what events to attend, because there are far too many good ones to choose from!


With no classes yet and (until yesterday) being without the textbooks I had been studying this summer, you may wonder what I've been doing for the past week. Well, apart from getting settled and playing games, I've been working on fleshing out designs for a new project in RPG Maker. I've decided to switch back to the RPG Maker XP engine this time, mostly so that I can make more visually distinctive maps that don't rely as heavily on lighting effects.

The general premise of the game is that an artifact known as the Chaos Mirror has been destroyed, leaving our two heroes, Mars and Corona, stranded in different dimensions, each parallel to the one from which they both came. In order to return to their world, they have to find and repair the broken mirror in their respective dimensions. The player can switch between the two dimensions using mirrors that are scattered throughout the world. Certain obstacles in one dimension will be impassable without action being taken in the alternate dimension, so this will add variety to the puzzles and gameplay and give some much-needed interaction between the storylines of the two characters.

In order to make combat more interesting, I've delved into several RPG Maker websites to find scripts for a custom battle system that allows for more visually exciting battles and a wider variety of skills and character classes. The battle system I've found allows me to add features such as active/wait battles (think Chrono Trigger), the Overdrive meter from Final Fantasy 7, Blitz skills (skills that require the user to enter a combination of keys/buttons in order to execute them), and animated battlers, which are noticeably absent from both RPG Maker XP and VX. It's going to take me a while to get my head around all the features, some of which I won't even be using, but once I do, I'll have a fairly robust system up and running, one that isn't just your standard turn-based affair.

My hope is that I'll be able to continue this project even after classes start, but we'll see. Whether it's through this project or something else, I do intend to pursue studies in game design, since I won't be getting education in that field in the classes that I'll be taking. While I may need to pidgeonhole myself in terms of technical skills in order to get the job I want, that doesn't mean I can't still make myself a more rounded individual outside of my main studies.

Anyway, that's all I have for now. Once classes start, I'll make another post. One more week!

Tuesday, July 27, 2010

A few meandering thoughts about storytelling

I just recently finished watching Season 2 of Legend of the Seeker, a show based on a series of books called the Sword of Truth. The novels, written by Terry Goodkind, were some of my favorites during high school when I was reading a great many 800+ page fantasy books. Indeed, I read so many books during that time that one can't help but wonder what it is that distinguished these in particular from all the rest. Many of the others had similar stories, similar characters, along with all the typical trappings of fantasy novels: wizards, enchanted swords and trinkets, strange creatures, mystical prophecies, etc. I can't even really say that Goodkind's writing was any better or worse than the other authors'. However, after watching Legend of the Seeker, I now have a much clearer picture of what set Goodkind's works apart.

About half-way through watching the first season, I started to wonder how much of what was going on actually corresponded to the events in the novels. While the characters and the general outline of events seemed to be as I remembered, it had been so long since I had read the first book in the series that I couldn't rely on just my memory. I was surprised to discover, as I skimmed through a few of the chapters in Wizard's First Rule, that a great many things were different, and not just in small ways either. Many scenes in the book did not appear in the TV show, and vice versa. However, what was more surprising was that this did not bother me in the least bit. As I continued to watch the show, I tried to determine why this was and, now that I've finished with what's available (and most likely all there will be, seeing as a third season is unlikely at this point), I think I know.

The producers, directors and, for the most part, the actors in Legend of the Seeker have succeeded in capturing the spirit of the books. While many of the intervening events may be different, the overall structure remains and the complex relationships between the characters, the moral dilemmas, the deceptions and betrayals, etc., are all there. The characters were cast well and the actors do an excellent job at playing their respective rolls, and yet Richard appears differently, both in appearance and personality, than I imagined him. However, this too failed to bother me.

As the last scene of the final episode faded out and I wiped the tears from my eyes I realized why, despite all the changes made, the TV series still seemed identical, at least in spirit, to the novels that had been etched into my memory years ago. The reason, as corny and trite as it sounds, is love. Time and time again, Goodkind's stories evoked in me a strong emotional response, and this came in particular from the dynamics between Richard and Kahlan, the principal characters of the novels and of the show. Their relationship is the crux of the Sword of Truth novels and The Legend of the Seeker was so successful in capturing the emotion and the spirit of it that, even had the writers and producers deviated even more than they did from their source material, I think the show still would have seemed a faithful adaptation in my mind.

Having gone through this train of thought and other similar ones, I've come to realize that, to me, good storytelling involves characters, relationships and ideas. The overall "feel" supersedes the details. Tolkein's Lord of the Rings, while undoubtedly memorable and well-written, is difficult for me to re-read. There's simply too much detail -- it gets in the way of the characters and the flow of the story. (A number of other fantasy and sci-fi authors are guilty of this as well.) Because of this, I consider Peter Jackson's film adaptation of the books to be as much of an achievement as Tolkein's original work. Goodkind's stories don't suffer from this -- despite being many hundreds of pages each, they're quick reads. Granted, the language isn't highly elevated, but flowery words get in the way of communicating ideas more than they help.

One of my favorite movies is The Shawshank Redemption. Stephen King, the man who wrote the story the movie is based on, is often criticized for not being a good writer, but when it comes down to it, being a good storyteller is far more important, and Shawshank has one of the best stories I've seen on the big screen. (I also thoroughly enjoyed King's Dark Tower series despite all of its supposed flaws.) One could say it's a story about escaping from prison, but really it's more about the idea of liberation. And more than that it's about a man and his friend. Did Tim Robbins really kill is wife or was he innocent? Does it matter? No, it doesn't.

Another, more recent favorite of mine is Inception, which has been a hot topic among moviegoers and critics. Sure, there are a lot of flashy, imaginative ideas about dreams and reality, but if you strip all of that away, it's a movie about a man and his guilt. In the high school literature classes that we've all taken, we've been taught to analyze everything, which in some instances can lead to a deeper understanding of the story, but I think that in doing this we often forget how to appreciate, at face value, what's right in front of us. I've seen tons of interpretations of the movie, some of them exceedingly complicated, but in my mind, the simplest and most logical explanation is often the best one. Did the top fall over or is Cobb in a dream where everything worked out in the end? From Cobb's point of view, it doesn't matter, and I can't help but think there's something brilliant about this.

Saturday, July 24, 2010

And now for something completely different...

Since Google Sites doesn't allow public user comments, I've decided to get a blog and embed the frame inside the website. If I decide I don't like it, I can always change back. Or, you know, Google could allow user comments that aren't just for owners and collaborators of the website... but if they haven't done it by now, I'm not sure they will.

In any case, now you can actually give me feedback on my website in my website... sort of. Fire away!