Last entry I wrote about how I managed to land my internship, now I'm going to write about my experiences in the internship so far, and what I've had to do. I think I'm going to write a third entry about the technical aspects and how the ps2 dev works, since I think it's pretty interesting.
I'm not entirely sure how much I'm allowed to say about what I'm working on, so I'm going to err on the side of caution, but it's not exactly starcraft 2 so I doubt it'll be a big deal.
The game is for the ps2, and it's a kid-oriented game, but designed so that the whole family can play. It's a sequel to this and this. For those of you who are too lazy to read the wikipedia summaries (I know you're there. Yes you), here's a quick rundown.
The game is themed - the first game was jungle-based, with 4 monkey characters and the second was sci-fi-based, with 4 robot characters. It takes advantage of the Buzz! controller which looks something like this:
It has a big red buzzer at the top, and 4 coloured buttons down the main body - blue, orange, green, yellow.
The game itself is made up of 35 minigames, all with 4 characters coloured to match the buttons. All the games have pretty similar ideas. Either you have to press a sequence of colours correctly, or hit the right colour in response to prompts, or hit the buzzer in a reaction-based setting. The games are bright and simple, to appeal to the kids.
When I joined the team, a good 30 of the games had already been finished. I started off slowly getting used to the existing codebase. In fact, just setting up the development environment and checking out the 30GB source tree took most of the first day.
The first thing I did was figure out the particle engine subsystem, and go through several minigames adding in particle engines in appropriate places. I started to slowly branch out doing different tasks and learning the various parts of the code.
In my 2nd or 3rd week (I forget), I was given one of the minigames to do myself. Mostly the minigames are worked on by one coder and one artist, with the animators doing animations as necessary for all the games.
It was really fun piecing together everything to put together a full game. A lot of the actual code was pretty simple - boiler plate plus a basic FSM to govern the gameplay. Since the game is very fixed and low-interaction, a good 50% of the code required is just glue to play animations at the right time, load the correct models etc. The only difficulty is learning the library functions to be called etc.
I'd say I now have a pretty full understanding of how everything fits together. It's very well done actually, even if it is a bit messy in places. The "A-ha!" moments I've had while learning everything have been really fun. It's amazing that I've only been here just over 4 weeks actually, but I now know pretty much the whole shebang. Or at least, know it well enough to use it - obviously I don't have the same kind of understanding as the people who have been working on it for months.
Which brings me onto the engine itself. Frankly, it's a total mess - the original engine was written in pure C, but the new code we've written is in C++ and that means a lot of ugly globals. Combine that with tight deadlines and it means very quickly written code that is intended to work, not look pretty. I don't have a problem with that, but it was interesting to see since I've been told by many people that coding standards are so vital, and everything must be designed up the wazoo. Validation is nice ;).
The engine was written by the company who wrote the first game (and the second game, in fact). I don't believe it was written specifically for that game, it's more general than that. However, we were only provided with the engine as binary libraries and header files.
Oh, and no documentation beyond (sparse) comments.
Basically it means that if we ever get confused about what a function is doing we can't go into the source and check. There have been quite a few places where we've wanted to, but we just have to guess/ignore it. The original company is pretty good about responding to bug reports but AFAIK they don't really support the engine.
At the end of this week we have to submit the game to alpha quality, which looks like it might be a bit tight. Things should be pretty fun though.
Next entry I'm going to write about the technical aspects which are pretty interesting - ps2 dev, what sort of limitations and problems we've come up against.