Monday, November 24, 2008

We're moving.

That's right, we've got a new blog.

Unfortunately it looks like it's going to be tough to export all of our old blog posts into the new system. I don't know of a way that would transfer the posts and comments other than manually doing it (which would be ridiculous. I mean, that's what we have computers for!). The only thing I can think of would be to use this blog's RSS feed to retrieve all of the posts with their formatting (hopefully), and then I still don't know how to import those with the correct date into the new system.

Any ideas?

Oh yeah, this is also the last post for this blog, all new ones will be at the www.wombatstorm.com/blog page. Enjoy.

Monday, November 17, 2008

Java Generics and Variable Return Types

Back when I first started programming in Java, they didn't even have Generics. It was a simpler time. Admittedly, I was a freshmen in college just starting to learning Java (and programming for that matter) when Java 1.5 was released, so I really didn't understand what all the hullabaloo was about. I probably thought something along the lines of "Sweet! Now I don't have to cast when I use Vectors!"

Unfortunately my knowledge of Generics is still lacking, but I'm learning. Slowly.

Today I ran into a new problem: I wanted to a function to return a Vector of objects, but the type of object would change. So the usual solution of:

public MyClass< G > {
    public Vector< G > myAwesomeFunction() {...

fails because I don't want to have to instantiate this particular class every time I want to call that function. I searched for a long time, and could see no way to define the return type of a function when it is called. If you know how, please let me know, because it seems like it would be useful at least in this one case.

In the end I had to settle for creating a generic inner class that the function could instantiate, and then writing a function for each type that I wanted. Not ideal, but the interesting code is not duplicated as it resides in the inner class. This solution also avoids the casting fest that would occur if I just decided to have one function that returned a Vector of Objects.

On a side note, during some "research" on Generics I happened across Whitespace, a programming language which only uses, you guessed it, whitespace. All non-whitespace characters are ignored.

Wednesday, November 5, 2008

A bit of code.

This being a blog about computer science, I'm surprised that we have yet to post any actual code. Well, that's about to change:

/*
* Form: if n(x) then set y
*/
private boolean checkSyntax(String s) {
  Scanner scan = new Scanner(s);
  if (!scan.next().equalsIgnoreCase("if"))
    return false;
  if (!scan.next().equalsIgnoreCase("n"))
    return false;
  if (scan.nextInt() < 0)
    return false;
  if (!scan.next().equalsIgnoreCase("then"))
    return false;
  if (!scan.next().equalsIgnoreCase("set"))
    return false;
  if (scan.nextInt() < 0)
    return false;
  return true;
}

I know, I know, not exactly awe inspiring. In fact, Something about this code just seems wrong. It's ugly, with way to many "ifs" in a row and way to many return statements. Not to mention that it only works for one particular case! I mean, what happens when I want a check the syntax of something more complicated (which would be just about anything). Well at least it's commented.

This method took about a minute to write, and despite it's apparent inelegance, I am rather happy with it. I would even go as far to say that it's a solid piece of code. I've run quite a few malformed statements through it and it handled them with no problems whatsoever (due to the handy scanner class), and it's easy to read. It only handles a very simple syntax, but that's all I need for now.

Right now I'm building a prototype of a program that will test out the ideas I presented in Stabilize This. Right now all I want it to do is read in a text file of rules and then execute them on a simple graph. I can then see if the algorithm (rules) stabilizes within a certain time frame.

The next step would be to generate random graphs and track how the algorithm performs on each one. Finally, I will create a program that generates, combines, and mutates the rules. Then I will be able to generate and test algorithms to my heart's desire.

Right now you are probably thinking, "But James, isn't using plain text as an intermediary data structure going to be far to slow to do any significant amount of testing?" Absolutely, which brings me back to my ugly little piece of code: once it has served it's purpose it will be discarded as quickly as it was written. For now it's handy to have so I can easily create test cases and visually check the output of and generator that I make.

James

Wednesday, October 29, 2008

It's time to move on.

To a different website. Haha, did you see how I wrote an ambiguous title to trick you into reading the next sentence? Quite clever of me.

But as I was saying, I think that it's time to start looking for a new host. We need a site that can host files, and preferably one that will also host a repository for source control. Plus, it's about time we claim www.wombatstorm.com before someone else does.

Monday, October 27, 2008

Stabilize This!

Matt brought up some good points in his post; we should be only posting about interesting and unique things. I look forward to his future posts, even if less regular.

This past week I have started a small project, inspired by a talk given by Alan Jamieson of St. Mary's College of Maryland on self-stabilizing algorithms for graphs. Hopefully he will post an abstract of his talk soon, since I'm sure that it will explain the subject much better than I am about to.

One of the most simple example is the toddlers and cookies example: each node of the graph can either be a plate of cookies or a toddler. For a toddler to be happy, it must be next to at least on plate of cookies (connected by a vertex). Giving a random graph with a random configuration of cookies and toddlers, write a set of rules that will place toddlers and cookies in such a way that all toddlers are happy (and thus stop their incessant crying).

The rules are as simple as "if a toddler is not next to any cookies, replace that toddler with cookies." The rules may become more complicated if you would like to find a set of rules that always result in happy toddlers with the least amount of cookies. The important part is that the rules are all simple "if...then" statements.

It occurred to me that one could easily generate these rules and then a bunch of graphs to test them out on. It would then be a simple matter to find the best set of rules. For a simple example like toddlers and cookies, one could just test every possible combination of rules. For a more complicated problem this might be unfeasible as the possibilities grow quickly.

At this point, I would like to see if a genetic programming approach could lead to usable results. All the elements are there: easy to generate and modify programs (the rules) that are easy to evaluate (number of moves, is the final graph correct).

So that's what I'm doing now. This post is quite long enough as it is, so I'll save my progress so far for another night.

Friday, October 24, 2008

Meh

So I blatantly missed my Wednesday post, sorry about that folks. I think that this blog is a good exercise for myself if I actively have something interesting to talk about: I am working on a project, doing research...and not just repeating plenty of things that could be read elsewhere.

Since I am not able to really talk about my work, I feel that I don't have anything worthwhile to contribute to the blog right now, so I am going to rescinde my promise of posting every Wednesday.

I will post when I have something worthy, and interesting, for our fair readers to read. So, probably once I have the energy to do some of my own work outside of the office, you will hear from me more often.

-Matt

Monday, October 20, 2008

Titans of Steel

For those of you out there that enjoy hex-based strategy games with a heavy dose of RPG elements that just happens to be about giant fighting robots, then I have a game for you: Titans of Steel: Warring Suns! And as if giant fighting robots wasn't enough, the game is free!

I remember spending hours playing the original TOS about 8-10 years ago, and it was a blast. Since them, Vicious Byte has created another version (thus the "Warring Suns") which has the same core game play mechanics but greatly expands on the graphics and sound. The original was... well let's just say that for the time it looked okay and if you turned off the music it was alright. The following review applies to both games. It should be noted that the original is a measly 8MB compared to Warring Sun's 297MB.

The game itself is composed of three parts (which unfortunately is still confusing, although now at least tied together with a better menu system). First you have Head Quarters, in which you manage a team of Titan pilots. Here you can hire new pilots, assign them to titans, and spend their experience points on skills. This allows you to specialize your pilots to specific Titans, such as a pilot that is best with energy weapons on medium titans and is skilled in electronic warfare. We'll call him Frank.

Next up you have the Factory. This is honestly the part I love the most. Here you can build, repair, and modify titans. If we are so inclined we can build Frank a nice medium titan chock full of energy weapons. We have to balance multiple factors to create a good titan: weight, space, heat dissipation, ammunition, armor, weapons, and goodies. There is nothing as frustrating as overheating your titan after just two shots with your Plasma Rifle because you skimped on the heat regulator. The game provides some features to help you out, such as a "pinboard" that lets you quickly check the strong and weak points in your design. There are a ton of pre-made titans, but it's too much fun to make your own.

And if you build your own, you can feel a sense of pride when you enter the battle mode and demolish your enemies! The hex map, terrain bonuses, fog of war, and turn based system is nothing new or special, but it is genuinely fun. Part of the enjoyment comes from the shear amount of strategies and options that you have available to you. This game is so complex that you can spend hours playing one battle carefully moving your pieces as if it were a chess game: fast units scouting the enemy position under the cover of long range units and then linking scanners back to the indirect fire units so that they can launch rockets from the other side of the map. Or you can go a more simple route such as, "HAHA! Who would have though Frank's titan runs really fast and has two chainsaws!?! VVRRRRRRRR!!!!!"

The game does have a major drawback: it is confusing. The user interface for the battle mode is excellent and takes only a modest amount of tool tip reading to understand, but the rest of the interface is difficult to use. The problem is compounded by the lack of a back or save / load feature. If you make a mistake, there is no going back, if your pilot dies he's gone (remember that your titan has an eject button!). Overall all though, this is still a great game.

Just to give you an idea of how fun this game is, I came home from work today and played it for four hours straight. And I just bought Rock Band 2 yesterday. Well, so the real reason I'm not playing Rock Band right now is I was kindly reminded yesterday that I have downstairs neighbors. And by reminded I mean they were knocking on my door five songs in. So until I figure out how to play the drums quietly, I have to keep my rocking out to a minimum.

Anyway, here is a short interview with the four members of Vicious Byte: Interview

Wednesday, October 15, 2008

So . . .

Damn straight you don’t speak for me son! Heh I just wanted to say that. So, now we all know why James writes here, and I can say that I don’t think I fall quite within the same parameters. I don’t necessarily feel that I need practice writing, though it definitely does not hurt at all. I think for me it forces me to think about stuff that I would not necessarily ponder otherwise, or at least think about them at a deeper level. However, that still leaves me with another problem.

I don’t really think this blog is useful, at all, for anyone other than James and me. At least in terms of me, I know I am not making any amazing headways in computer science, or awesome new finds in solving problems. I am just not that sort of person. The main reason this blog started was for James and me to be able to document our process while we were designing simple games in school, and hopefully one day part of that will return. I know that right now I am often not in the mood to do much of any project in any way involved with computers (not counting playing games). But that will probably change in the future when I am not so frazzled and mentally strained from being at work.

But back to the main point of that last paragraph, I don’t believe that anyone else can take anything away from this. That might not be true, and will hopefully change as James and I get more experience in the computer world, and actually start to solve complex and meaningful problems. But in the short term, James, I will be happy to criticize your writing (just kidding, it’s not nearly as monotone as your voice).

In other news, I have solved four ¬– count them, FOUR problems from the Euler site. Go me! And I didn’t use any silly super math-y shit either. I brute forced those fuckers in Java, how much more could I be wasteful? Probably not that much.

Monday, October 13, 2008

Why should anyone read this blog?

I have been questioning the merit of several computer science related blogs that I read. Well, actually just the two that I read on a regular basis: Coding Horror and Joel on Software. I mean, do I really need to read yet another blog post about how awesome source control is (Check in Early, Check in Often)? Is it really worth trying to glean some tidbits of wisdom from the writings of a single person whose only qualification is that they can make a blog?

Well, I'm being hasty here, Joel Spolsky and Jeff Atwood each have impressive resumes, and I am hoping that their joint project Stack Overflow lives up to expectations. And I can't say that my time reading their blogs have been a waste of time as many of them have introduced me to something new. I often find that their posts send me of on tangential searches and I often learn quite a bit about something that I would have never looked up otherwise.

So that's why I read their blogs, and I suppose I shouldn't question their merit given the authors experience and expertise in their respective fields. But there are a ton of computer science blogs out there, many of which are nothing more than a neophyte or two rambling on about whatever happens to cross their mind that is related to computer science but broad or simple enough to cover in four to six paragraphs. Like this one.

So why do we write it? Well, I should be careful with the "we" as I can not speak for Matt. My reason for writing are selfish: I want to become a better writer and I enjoy talking about computer science (or writing about it when I run out of people willing to listen to me). But I don't know all that much and often times my understanding of a topic is tenuous at best, so I doubt that one can learn from my writings.

It's probably sounding like the conclusion of this post is that no one should actually read this blog, as readers seem to have little to gain, but I have so much to gain from them (I told you I'm selfish). I need user feedback to find out what I need to improve about my writing, and it also helps my inflated sense of self-importance.

So please keep reading my posts, and together we can make me a better writer.

*I should reiterate that the opinions expressed here are mine and mine alone. I do not presume to speak for Matt or future collaborators.

Wednesday, October 8, 2008

Software Development: a Super Broad View (this title sucks btw)

Just to get this settled now: I am sure James will beat me at the Euler contest. Considering that I am having trouble remembering how to properly compute Fibonacci numbers, I feel that my chances are doomed. Add on top of that that I am going to be pretty damn busy for…well the rest of the month (shipping a version release), well…whatever.

So on to my topic for this week –

Software Development: a Super Broad View.

That is probably a horrible title for what I want to talk about, but it’s the best you are going to get right now. My project is supposed to drop in roughly the next four weeks. Our System Integration and Test team still have over 600 test cases to go – these things are anywhere from 20-80 pages (maybe more). We also have a multitude of bug fixes and new features to test, re-fix the ones that break still, and retest. I think System I&T has around seven, maybe eight people working for them. Our software team has nine, including myself. That’s a fuckton of work that needs to get done fast!

My co-worker, K, (on a different project) blames poor project management. “We should not have let ourselves make promises we couldn’t keep”. My other co-worker, C, says “Well, we have to make promises we hope we can keep so we can get the contract”. This game the industry plays depresses me. Here comes the big, bad contractee (in our case the Military, HAH) and so of course we say “Yes oh high and might master, we shalt deliver unto thee supreme software” (hm so I just hovered over the squiqqly in word under thee, expecting an explanation. I am too used to Eclipse). Anyway…we say something like that. But who gets fucked over by this? The workers! They need to bust ass in order to fix the bugs, implement the new features, fix the new bugs that the new features produced, etc.

I understand this is how the industry is; it just makes me sad on the inside. I truly wish for a better world, where people don’t get fucked over by the higher ups, and everyone trusts each other, and is fair and honest, and you can actually be informed of the presidential candidates and still feel good about voting. I know those things will never happen. So we do the best we can regardless. All I know is that I am going to be very busy until December.

-Matt

Monday, October 6, 2008

Euler!

Have you ever read the webcomic XKCD? Well, you should. Even if you aren't a fan of computer science and mathematics, there are plenty of comics that you will be able to relate to. And don't forget to read the alt text for each comic, it's like two jokes in one!

The other day, I was informed that the author keeps a blag (that is, a blog. It's from the comic. You should really read it). And after reading an interesting post about jet planes on tread mills, I stumbled across a project that Randall Munroe (the author) is involved in: Project Euler. Unlike the comic, you would probably only care about this site if you are interested in computer science and mathematics.

The idea is simple: there are a bunch of math problems, and the site tracks which ones you have answered correctly. Each problem is well suited to being solved using a computer, and there is an accompanying forum in case you get stuck. The problems range from very simple (10 lines easy) to very difficult (I have no idea how to even start some of these). It's a great way to brush up on coding and math skills.

I've only done the first two so far, and it's nice to be able to work on small, yet interesting problems. After modifying other people's code in a huge code base all day at work, it's nice to sit down and write a small program myself. It also gives me a chance to brush up on my command line skills. I've been too pampered by fancy IDEs for to long!

And now, for the big news: I CHALLENGE MATT TO A EULER OFF!

That's right, I went there. If he accepts, the rules shall be as follows: the person who has completed the most problems by the end of the month with no outside help wins. So what do you say Matt? It's a great chance to brush up on your skills and the problems are all pretty short. You've got to ask yourself one question: "Do I feel lucky?" Well, do ya punk?

Wednesday, October 1, 2008

Oh the MMOs

The thing about updating this weekly, and not really working on any games right now, is that I don’t often have a very complete topic that I want to post on. If I could post about work I would, but I can’t. One little thing which has been wandering around in my noggin the last couple of days has been classes in MMOs. I recently got a friend at work to “rez” my account, meaning I get ten free days of gameplay (designed to lure me back in; it may be working).

Anyway, if you look at the numerous MMOs that are currently on the market, they are all alike in under laying gameplay (except a few, Eve Online comes to mind (I think, I have not played it much)). What you have are tanks, healers, and nukers. It can be in a fantasy setting: WoW, Warhammer Online, Everquest, Age of Conan, just to name the big ones, or it can be in a comic setting: City of Heroes / Villains. What I would like to see is a true break from this core component of someone taking the damage, someone healing the damage, and someone dealing the damage.

I love MMOs because of their social aspect. I really enjoy grouping up with a bunch of people to defeat a hard puzzle or opponent. But this does not need to mean fighting. Rock Band, while not an MMO, teams up four people to defeat a song, per se. What if a game play mechanic was designed that required ten people to solve some sort of puzzle through teamwork in an entirely new way? Someone who was good at math, someone who was good at art, someone who knew how to program…etc. would be required to get to the final solution. What if it actually allowed you to practice your trade, in a team setting, and made it fun? I have not though much about what type of game this would be. Perhaps I shall continue to ponder it. Please give some input if you have any ideas!

-Matt

Monday, September 29, 2008

Operating Systems

Seeing as I am not done setting up new computer (I've been pretty busy), I suppose I will post on something else. Operating systems!

While today we only there are only 3 main operating systems (2 as far as most consumers are concerned), there used to be many. Here is an ascii art graph of chart of the decline in their numbers (Please excuse all the `s. HTML and white space don't get along):

```|```/---\
lots|---/````\
```|````````\---\
```|````````````\--\
```|```````````````\
`3`|````````````````\--+
```+----------------------------------
```A while ago```````````Today

I would love to go into the details of the research I did to come up with this scientific looking graph, but I won't... for the sake of brevity... yeah, that's it.

As you can see, OSes have become endangered. Each year there population declines, and there hasn't been a new OS in years. If we aren't careful, we may lose the majestic species forever!

Well, obviously OSes aren't going anywhere for a while, and we probably won't see any of the big three disappear (although it can be argued that Mac's OS is starting to resemble a Linux distro more than a completely separate OS since it is now based off of BSD (to be honest, I'm not really sure what the difference between BSD and Linux is)).

Have OSes really just become so complicated that it's not feasible to build a new one from scratch? Are we going to just continue to add on to what we already have?

Well, I found some people that don't think so: http://www.osdev.org/. I would suggest checking out the wiki, it has everything you could ever need to get started on a brand new OS. Even if you never plan on trying (like me), it is still interesting as a reminder to just how much goes into one of these behemoths. And humbling, to say the least.

So the next time you get frustrated at Vista for being bloated, Linux for being hard to install, or Mac for ever thinking that one button on a mouse is sufficient, and grumble that you could do better, well, now you know where to start. And if you don't think that a small group can put an OS together, check out http://www.menuetos.net/, it's an OS that was written completely from scratch and fits on a floppy disk. I used it back in high school (back people still used floppies), and I'm happy to see that they are still maintaining the project.

Wednesday, September 24, 2008

Rock Band 2 and using Properties

Good Wednesday Everyone,

Unlike James, I did not do a good job of thinking of a topic during the last week, slightly busy and such. I did do a fair amount of Rock Band 2 playing, and I will spend a few moments summing up what the multitudes of reviews have said along with a few pet peeves. I think I will also spend a few words talking about using Properties as a method of potentially fostering easier and quicker game development.

Rock Band 2 is a fantastic expansion pack game. No really, it is more a an expansion pack with a few gameplay tweaks than it is a full sequel, however I have no problem spending 60 dollars on 80 some-odd fantastic songs along with everything else. The song list is pretty damn crazy! While there are a few songs which I am pretty “meh” about in terms of their value as a song in Rock Band (Master Exploder, Visions the sound quality isn’t that far off) in general the track list is amazing. But where I feel Rock Band 2 falls short are in the little itty-bitty details which you often notice when you play a game a lot. How come my previous scores are displayed as they are? Where are the stars I earned, or how about the percentage of the song I was able to complete? Why aren’t these options I can turn on and off? The more I am able to customize my interface, the happier I am. These are not hard things to implement. All of these fields are being stored by the game, and I should be able to tell the game which ones I want to see. Overall Rock Band 2 is very worth the money, I just wish that it was a slightly more polished presentation.

Now, on to using the paradigm of Properties to maybe help develop games quick and easier. Properties are something that I use at work. Essentially I have the ability to adjust values in my program by simply changing them in the property document, and then restarting the program rather than hard coding them in and having to constantly re-compile. What if we wrote a helper class that, at runtime, would read in a text document which had a map of values and used those when running the game? The guy is hitting too hard? Well turn down his damage and restart the game. This allows for quick and easy tweaking without having to go back to the source code. This also allows for an easy way to modify the game if someone wants to make it easier and harder.

Now the system I use at work is incredibly robust, and what I explained here is only a tiny fraction of its power. However, it was designed and written by people with much more experience than myself. I simply think that some of the ideas behind it have a lot of potential.

Anyway…until next time!
-Matt

Monday, September 22, 2008

New Computer

I typically try to think of ideas to post on throughout the week, to give me time to develop them and prevent having to rush one out just to keep up with my (self-imposed) deadline. This past week, however, I was having a bit of trouble. Nothing I came up with really seemed to be of the... caliber that has come to be expected on this blog. But I lucked out as a topic just fell into my lap last Friday morning when I went to turn on my computer: it was dead!

My first thoughts when looking at the black screen were, "Alright! I bet I can turn this into a blog post! Sweet!" And as I spent the next few hours trouble shooting the problem only to find that the problem is either with the video card, motherboard, or CPU, I could barely hold in my jubilation as I began to write the post in my head.

I have decided to go ahead and build a new computer instead of fixing my defective one, as this is not the first major problem that I have had with it. So, Friday night I took my laptop down to a nearby Chick-Fil-A and spent about an hour picking out parts on NewEgg.com. Why Chick-Fil-A? Because the internet in my apartment was out, and you can't really beat the combination of free wi-fi and chicken sandwiches.

Parts in total cost $715, and that's for the case, power supply, processor, motherboard, memory, and hard disks. I'm going to see if the old video card still works before I buy a new one because I would rather wait a year and get a better one for half of what I would pay for a top of the line one today. I can reuse the optical drive, as it is a decent dvd burner, although the IDE cable my be a pain in my new case. (An interesting aside, I found an old newegg wishlist from November 2006 which cost about 700 bucks as well. You can't make a direct comparison since many of the parts are out of stock and my priorities have changed, but I'm looking at roughly 4x RAM, 2.5x HD (only counting one of them), and 2x CPU (well, 2 cores instead of 1))

You see, I decided to go with the micro ATX form factor. These may seem like a really dumb idea for someone who likes to play a lot of games on their computer, but I assure I gave this plenty of though (which I suppose doesn't mean that it's not a stupid idea). I had originally been considering going pico ATX: small, low power consumption, low heat, and little noise. Unfortunately the trade off is in performance. Pico would work for me if I wanted a cheap server running 24/7, but as my main development and game playing rig it just wouldn't have the muscle.

Micro, however, doesn't force you to compromise much more than a few expansion slots that I would never use anyway and only a little in the way of performance. I will share the wish list on NewEgg when they update their public lists, but for now I guess I'll just link to all the components:
Intel Core 2 Duo
ASUS Micro ATX mother board
OCZ 2 x 2GB
Samsung 640GB SATA 3.0G (2 of them)
Athena 470W Micro ATX power supply
Silverstone Aluminum Micro ATX case

Not bad for a computer that will actually fit in my desk. It's not the bleeding edge, but it will get the job done for the next few years. As long as it does what any good collection of hardware should: never bother me. The harder decision here: what OS.

This may seem like an easy question considering the fact that I am working on games in XNA, and XNA means Windows. But windows isn't ideal for me, as I also would like to host files and perhaps an SVN repository. Windows just doesn't have the reliability of a solid Linux distro, and I miss bash (I'm sorry cygwin, but I need the real thing).

Whatever will I do? Find out in next weeks blog (Ha! I knew I could stretch this into two posts)! Will it be Windows? Will it be a Linux distro? Will it be some mixture of the two with the help of some super nifty virtualization software?

Wednesday, September 17, 2008

So...Rock Band 2...(and Braid)

Kept my busy all evening, because it is very fun. So I will have a more involved post in the next couple of days about, you guessed it, Rock Band 2!

But in brief I do want to draw your attention to Braid. The child of Jonathan Blow, this is truly an epic platform game. While Blow had some help from other sources for the art (and I assume sound), the incredibly basic game play mechanic of controlling time has never been so fully realized. Imagine the new Prince of Persia games, except now you really do control all of time. You can rewind back to the very moment that you entered the level, or if you miss a jump, rewind to the to before you feet left the ground. You never die, and you never have to worry about saves.

But the game is still incredibly challenging. Some of the puzzles are complete mind benders, and require a good ten minutes of sitting and mentally running through all your options until you get the proper set of moves to accomplish the goal. One of the neatest things, however, is that there are puzzles within the puzzles. You have the over arching story that allows you to really, truly relate to the characters, but throughout each level you battle puzzles to get...puzzle pieces. These can be put together to form 3x3 and 3x4 puzzle images that help deepen the narrative.

Blow did have to sink approximately 180,000 dollars into this project according to Wikipedia. That is a wee bit more than I am willing to put down right now for any kind of game. However, within the first week, Braid sold approximately 55,000 copies. At 15 dollars per copy we are talking about *busts out the start->run->calc* 850,000 dollars. Now I am not sure how much of that Microsoft gets to keep. Lets be super generous to them and say they get two thirds, so that leaves Mr. Blow with 275,000 dollars. Damn. And that was only the first week of sales. So to say that Braid paid off I think would be a bit of an understatement.

So I did not plan to write this much tonight. Rock Band 2 will come on full force next week!

-Matt

Monday, September 15, 2008

Civilization IV

As we approach this holiday season, there are many blockbuster games on the horizon and a few which have just arrived. Rock Band 2 is out, I have a copy of Spore waiting for my at my apartment's office (damn getting off work after they close!), Warhammer online is about to / has release depending on your version, and we have even more to look forward too: Fallout 3 is a mere month and a half off, and Starcraft 2 is on it's way.

But I have yet to play any of these games, so instead I'm going to do a bit of a review of Civilization 4, which I had somehow neglected to play until about 2 weeks ago. I guess this review is a bit late, seeing as the copy I bought was the "Game of the Year Edition."

You see, when Civ4 came out, I scoffed at the idea of paying fifty bucks for what looked nothing more than upgraded graphics for a game that would be fun in NES era graphics. Plus, I still remembered the features cut when they came out with Civ3 (Really, who cuts multiplayer in a sequel? 1602 A.D. / 1503 A.D. Don't think I didn't notice!).

But I am please to say that Civ4 is more than just a pretty re-skinning: some core game mechanics have been changed, and for the better. Take the new religion system for example, it adds a whole new dynamic to foreign relations (the system for which has also been greatly improved with the addition of much needed feedback) and a new way to expand your power.

While the new additions have given depth to the game, such as with the much improved unit experience system, Civ4 has become no harder to play. One of my room mates was new to the series and had almost no problem jumping right into a game thanks to the clear interface (smiley face good, frowny bad), sensible mechanics (tank beats horse) and surprisingly helpful adviser tips. I know that none of these things are brand new in this version, but they have been refined to improve clarity (hammers instead of shields for production, productivity units of 5 are grouped (5 hammers = 1 anvil)). I also have to admit that I listen to the adviser pop ups much more in this version, although they can still get annoying.

I would like to see more playable scenarios, and the camera can be frustrating if you try to fight it, and occasionally I just want to tell the pop up adviser box to shut the hell up because I know what I'm doing, I mean I'm the emperor of the most powerful nation in the world for crying out loud, but these are minor complaints. In the end, we have a great example of what a sequel should be. Civ4 is more refined, easier yet deeper, and even more fun than it's predecessor.

Although they did get rid of the palace.... unless my people just really hate me (did I mention that you can institute slavery?).

Wednesday, September 10, 2008

An Afternoon with Ben Wallace

Hello again everyone, it has been awhile since I have posted here. James wanted to start blogging again, and since he is focusing on doing a Monday post, I said I would have a post up by Wednesday for all of our non-existent readers.

Monday afternoon I had the privilege of meeting and listening to Ben Wallace, Engineering Lead for the Halo series. Ben gave a very interesting presentation on how he developed solutions to creating highly realistic lighting and material for Halo 3. Halo uses the tried and true method of bump mapping to apply textures to their models, and this gives the model much more depth without requiring more vertices. Bump mapping using take a flat texture that has different normal values (how much and in what direction the light bounces off) for different areas on the texture. When this texture is applied to a flat object, that object acquires depth.

Much of the depth on the textures in Halo 3 comes from this technique. This by itself is not a huge contribution to game engineering, however Ben’s techniques for dealing with the massive amount of calculations that need to be performed is more so. Unfortunately for all of you, I did not take any notes during this talk (I wasn’t really thinking about blogging at that time). To sum it up, many calculations need to be done in order to deal with reflections of the world on shiny objects, light reflecting around the world, High Dynamic Range lighting – which is what happens when you are standing in a shadowy area, and there is incredibly bright light coming in from an outside source – and Ben and his team created and modified ways to approximate all of this so that Halo could be played with anything resembling a decent frame rate.

All in all it was an interesting presentation, and Ben is a very nice guy. I have rediscovered why I don’t think I will ever truly be a software engineer like he is, I just don’t have the penchant for learning math and honing my skills to the degree of sharpness that is required. Some things that he did mention at the end: If you want to be a game engineer you should definitely pursue some high end calculus, vector geometry, and other middle level mathematics. Along with that, make sure you are actually working with implementing these kinds of things on your own. Nothing will convince a game company to hire you more than seeing you have the initiative to do work for your own sake.

In other news, in the next few months, James and I should be starting on a couple new XNA projects for our own enjoyment. I am sure more details will be put up here and we flesh out the ideas we have right now.

Next week – talking about Braid and probably Rock Band 2!!!

-Matt

Monday, September 8, 2008

Dream, Build, Play

AKA: Dream, dream, and dream some more.

Microsoft has set out to, as they say, "democratize" the game industry with XNA.

For those of you who have not heard of XNA (and are too lazy to look it up) here are some helpful links: Gamasutra feature and Official Page. You will also find many references to it in past blog posts, as Matt and I have used it extensively and have even made some video tutorials on it: Blog Post or Download Page.

The idea is to give the power to make games to mere mortals. No longer will games only be produced by huge teams and EA's sweatshops, but by anyone with the with determination and a little bit of know how. XNA (you don't want to know what the acronym stands for) allows you to write games in C# that can then be played on both windows machines and the XBOX360. And other than the account required to play the games on your XBOX, it's all free! And if you sign up for Dream Build Play, you can get a four month Creators Club account free too.

So instead of having to learn C++, one can start of with managed C#, which is much easier to learn. As far as the amateur programmer is concerned, there are no make files or pointers or any of that other confusing C++ stuff. I originally learned how to program in Java, and I must say, the transition was quite smooth.

But XNA is more than just a language choice: there are a multitude of included libraries designed to make writing a game easier, and a plethora of examples and tutorials. There are libraries for interacting with a gamepad, doing matrix operations, and collision detection. I really don't know how they could have made making games any simpler.

But... where are all the games? There are some notable examples, such as some of the previous Dream Build Play competition winners (XBOX.com news), but I haven't really seen a major explosion of indie games. Maybe I haven't given it enough time, and maybe my expectations are too high, but so far the most Dream Build Play has done for me is taught me that "democratize" is actually a real word (I though for sure they had made it up!). I was hoping for a resurgence of the maverick game makers, a new John Carmack or Richard Garriott to show those big game publishers that we don't need them! If a kid gets sick of WWII shooter 12 and thinks he can do better, than gosh darn it he can! All it takes is some dedication and a spot of help from XNA.

But the industry has changed to much, and the best we seem to be able to do with XNA is make some slick looking arcade-style or casual games. Even so, and please correct me if I'm misinformed, we haven't seen an explosion of these games either. XBOX Live has had some successful arcade games (such as geometry wars and Matt mentioned "Braid") but we have yet to see a gaming revolution. I don't see people buying XBOX 360s just so they can play these games, and I definitely don't see "democratized" game making. But what can I expect? After all, a democracy depends on the involvement of it's people, and I certainly haven't done my part.

Which brings me back to the start of this post: despite being interested in games and even making some with XNA (such as the demo one Matt and I made for the video tutorials), I have yet to make a concerted effort to enter in the Dream Build Play competition. I have plenty of ideas and was really excited about this iteration of the competition, but now the deadline is looming and I have nothing to submit. I've got the "dream" part down, but have yet to execute on the "build."

Well, I think it's time for that to change. Although it's a bit late for this competition...

Monday, September 1, 2008

Steam

Let me start this post by saying that I love the idea behind Steam, Valve's gaming platform (http://www.steampowered.com/v/index.php). Being able to buy a game, download it, and then have it automatically update seems like such a great idea that I find it hard to believe that it's not more popular. With a high speed connection, it's ridiculous that one would have to drive all the way to a store to buy a game! Just download and play! So easy and convenient! Sign me up!

And I did sign up, I bought a few games through Steam, and I must admit, I was loving it. I could browse the store, try out demos, and I knew that if I ever bought a new computer, I could just re-download all of the games without the hassle of trying to find those long lost cd keys. Not to mention not having to pop a disk in to my pc every time I wanted to play a game (what is this, a console?).

Unfortunately my early optimism has been steam rolled by a horrible UI, debilitating DRM, poor network connectivity, and resource hog. Not to mention the fact that I am no longer able to play Team Fortress 2.

Steam can take a long time to load, and has increased my windows start time. That bugs me. It also does not work on networks with a DMZ. That bugs my room mate, who is kind enough to switch the option off (thus making his self-hosted site inaccessible when I want to play a game). For some reason, Steam still does not work on my network, and the UI gives no indication as to why, or even that a problem exists. This drives me nuts, because I don't even have an error number to start looking for help with. Finally, I can't play TF2, which downright infuriates me because I paid for the game.

Well, I might be able to play... I hit the launch button about an hour ago, and it appears that the game is finally updating. Finally. Two weeks ago I decided I wanted to see what was new in the Heavy update, and since then it has been an ordeal trying to update steam and get it to run a game. Although the whole time Steam was able to keep me updated on when all of my friends where online playing. GAH!

And when you get down to, all the convenience that is potentially gained by this content delivery system has been totally obliterated by the all of the problems I have run into. I like the idea, but thus far the implementation has left a lot to be desired.

Monday, August 25, 2008

You would if you had robot ears.

Many people have heard of Jonathan Coulton, the artist who wrote "Still Alive" for Portal, as well as the famous "Code Monkey." A hilarious singer / songwriter who isn't afraid to write songs related to computer science, he also has a pretty sweet take on music piracy (see the "Already Stole It?" section on his site: http://www.jonathancoulton.com/store/downloads/).

But Jonathan isn't the only one representing for computer science. Take a look at Monzy's "So Much Drama in the PhD: http://www.monzy.com/intro/drama_lyrics.html. With lyrics like:
Your mom circulates like a public key,
Servicing more requests than HTTP.
She keeps all her ports open like Windows ME,
Oh, there's so much drama in the PhD.
How can one not love his music? Okay, so I've only listened to that one song, but I really didn't feel like hunting through his blog to find more. Really, why do some people feel the need to write irrelevant blogs than no one even reads? His last post had a measly eight comments for crying out loud.

If you listen to his song, you may catch wind of a bit of a rap war between Monzy and a MC++ (http://www.mcplusplus.com/). Well, I have some good news and some bad news. The good news, MC++ has two albums for free download on his site, and I can say with confidence that it is the best hardcore gangsta rap that has ever been made about coding. Ever. The bad news is that the rap war is over, and MC++ has no one to battle.

Except Max Flow, the AI program that he writes for the specific purpose of rap battling! You really need to check these songs out, there are hilarious and of amazingly high quality. These guys don't mess around. The lyrics are smart, and it takes a few sessions to get everything that they are saying. For example, "Master and Apprentice" has some biting commentary on the state of hip-hop today buried in there.

So next time your coding and listening to some pounding techno ("Are you afraid of it?" "No, I just don't like techno."), change things up a bit and listening people rap about coding, as you're coding.

Tuesday, April 22, 2008

Where did all of the updates go?

As Matt mentioned, we have finally finished our XNA tutorial videos. Matt and I are extremely proud of these videos, and hope that they will be of use to fellow amateur game developers. Each of the videos took hours to produce, from writing the code, filming, editing, and revisions. And that is why we have not been updating this blog.

Actually, that's not true. In our packed schedules we still managed to find time for Rock Band. Thank you Harmonix for bringing us such a genuinely fun and accessible game. I love rocking out, and it's great being able to get all my friends to play, even the non-gamers.

Matt and I graduate in two and a half weeks, at which point we are going to have to change the description of this blog. And hopefully we will have even less time to update it, as we will be employed in the game industry. We'll see.

Sunday, April 20, 2008

SMP is DONE!

Well, all those people who read this blog (are there any?) good news. The tutorials for XNA are finally done. I am mainly posting here in hopes that people Googling for beginner tutorials will find their way here, and can then be passed on to the real site.

XNA Tutorials

Enjoy, and please give us feedback!

Saturday, February 9, 2008

Why I Don't Play Wow Right Now

I played World of Warcraft for nigh on two years straight starting in closed beta, took a break, came back for The Burning Crusade, and then stopped again when summer of 2007 ended. Why? Because, in a manner of speaking, I had already figured out all the patterns in the game.

I should probably rephrase that, but I was trying to tie it to James’s post earlier (he is borrowing my copy of “Theory of Fun”). I have not solved every underlying pattern that WoW has to offer, but I have experienced almost all of them, and they do not change. When you have a persistent online world, and you are expecting that people are going to pay to play in this world, you need to provide them with reasons to continue playing. Now is the time that you point out “but Matt, Blizzard is making another expansion…” and I say, “Yes they are, but I would like to address a point that going into and beyond simply releasing more content.”

Creating alternate characters is the other way, besides simply growing the world, that MMO’s retain players. However, I tend to find playing alts to be tedious most of the time. This is where I tie in the whole pattern issue. I have already played through this part of the world. Many times. Nothing changed. I am doing the same quests for the same people, in order to receive that same loot. What I would like to propose is the idea of a much more dynamic quest system.

In WoW there are two factions, Horde and Alliance, with different races and different starting areas. However, once you get to around level 30 or so, as either faction you end up in the same neutral zones doing the same quests. From 30-60 I did the same quests on my Horde rogue as I did when I was 30-60 on my Alliance priest. The quest giver simply changed race and name.

Obviously generating dynamic quests on the fly is a very tricky issue, considering that the majority of all quests in all role playing games are probably hand written and planned out. As a temporary solution I would also be strongly in favor of simply creating quest trees with different branches. I would be much better to be able to follow one branch in a series of quests, and then if I come back as a different character, I could follow a separate branch for different results.

I think as MMO’s continue to evolve, we will see worlds that are increasingly more dynamic, and this requires increasingly dynamic tools to work properly. Perhaps one of the reasons that we are in what I would call a quest rut is that the NPC’s in WoW don’t “require” anything. The dwarf who sends me off to kill the yetis that took over his cave is not going to actually return to his cave. But what if he did, and the next time I ventured by he needed other materials in order to rebuild. That is the kind of dynamic quest structure that would make me want to roll another character to and continue playing…and paying.

Tuesday, February 5, 2008

GDC, and theories on fun.

GDC is almost upon us, and I'm getting excited, as well I should be. As a gamer and a computer scientist, I can't imagine an event that would combine more of my passions. Well, unless it was a game developer's conference with a rock climbing competition and Mystery Science Theater 3000 playing in the background the entire time. Until the day that dream is realized, I will be content with attending the GDC. Plus, it's in San Fransisco, so I get to visit somewhere new.

I am a bit nervous though, since part of the reason I am going is to try to land a job. Since I don't graduate until May, my resume is a bit sparse. I am lacking the, "Must have shipped two games on X console" each job seems to require, but everyone has to start somewhere. I will be putting the finishing touches on my resume this week, and I guess we will see what happens.

On a slightly unrelated tangent, I have been reading "A Theory of Fun for Game Design" by Raph Koster, and despite how irritating I find the title (for it's casual use of the word "theory," which is a topic that has no relevance to this blog), I am benefiting greatly from reading it. First and foremost, it has got me thinking about things that I had never even thought to think of before. That was an odd sentence, so let me give you an example: I had never thought about what it is that makes games fun.

As I wrote that, I realized just how ridiculous that sounds from someone who is trying to get into Game Design. After all, shouldn't that be all that I am thinking about? It wasn't that I didn't think the topic wasn't important, I just assumed that I already knew. I've played enough games to know what I find fun, but I had not considered why it's fun, or even exactly what it is beyond "winning" and "crushing all those that stand before me."

Koster's book presents the idea that underneath their pretty exteriors, games are all really about patterns, and our brains love patterns. We delight in finding them, and in a game this is what we are doing when we start to win. We have started to recognize the underlying patterns in the game and have learned how to exploit them. I won't go into all the reasons Koster provides because he does a much better job presenting his point of view than I do, but I have to admit, it's got me thinking. I'm not sure how much I agree with him, but the important thing is that I'm now thinking about something that I had taken for granted. And thinking is good.

I hope to follow up on this post with a bit more of my impressions of Koster's book, but that may have to wait until after GDC, when I have a chance to reread it. And speaking of books worthy of a reread, "The Pragmatic Programmer" by Hunt and Thomas is also on that list.