Tuesday, July 26, 2005

Making a Game On the Left and Right Sides of the Brain

Two things motivated me to post today. First, I got a sweet new flat-panel monitor. A Dell 1905FP; I use an 1805FP at work and really liked it, then found that they're discontinued on Dell's site. Anyway, got it hooked up and it's a thing of beauty.

Second, and more importantly, I was checking my RSS feeds this morning and lo and behold, I see the ZMan of The Z Buffer giving me a nod! I emailed him and told him that seeing Vyde mentioned in what I consider a really useful site was just the kick in the pants I needed to start working on this thing again. Thanks again for the mention. :)

I had planned to pepper today's post with some sketches I did a while back, but I can't find my sketchbook. I think it's still at my apartment in Nashville. They'll get put up soon.

I visited Nashville this past weekend, and had a chance to fire up my PlayStation. Played GTA:SA for what must have been 3 hours straight. Felt good! Drive fast, crash, shoot people, dive out of planes, swim, gamble... those are six things you can't do in any other game.

GTA:SA is, IMHO, the best freeform game in existence today. To my mind, freeform gameplay is severely underrated today. Sandboxing is the most fun I ever have with games, and GTA:SA is the biggest sandbox available, with the most things to do in it.

But even so, after playing it for a while (using the save game I created after I beat the game), I realized that even the best freeform game can get boring. Eventually you run out of creative things to do, or new things to see. Here are some of the thoughts that occured to me while I was entering the boredom zone:

  • There ought to be a way to meet and "remember" pedestrians. They should all have daily routines and not be limited to walking around randomly. I'd like to see pedestrians enter buildings, pick fights, steal vehicles (any vehicle), gamble, parachute, and all the other things I would be able to do in the game. In a game with more resources, I'd like to be able to engage pedestrians in conversations. In a game like GTA, I'd like them to provide things from useless banter to current events, kinda like Animal Crossing.
  • Cars appear too predictably.
  • There's not enough activity in special zones, like airports.
  • There should be more side-missions available: air taxis, harbor tours, car repair, stealth thievery that actually works when you get in the designated vehicle, the ability to control multiple gangs and assign them missions, safehouse decoration, asset tuning, building demolition, hitman missions, team sports, manage a restaurant, etc. Insert favorite activity here.
  • There should be a way to bribe cops on a more long-term basis; or make them fear you.
  • There should be a way to accrue "evidence" against you that contributes to your likelihood of being busted.
  • Any pedestrian should be a candidate girlfriend.
  • Pimping should really work like pimping.
  • You should be able to shake down shopkeepers, or even take over entire establishments.
  • More various smuggling missions.
  • More micromanagement in general. When the game is done, more focus should be put on turning the GTA world into a simulator.

Anyway, lots of things. It's a shame that GTA on the PC isn't more extensible -- I could make a serious hobby out of making mods for that game.

Now, I understand that companies like Rockstar suffer from deadlines, budgets, personnel, etc. But since Vyde is a hobby project, I can theoretically add anything I want to it over time. So needless to say, to get the maximum enjoyment and education out of the entire process, and potentially open the game to the public, extensibility shall be a feature.

I know I'm opening a dangerous can of worms wanting to make Vyde as extensible as possible. But it lends more credence to the idea that I might want to concentrate initially on building an engine rather than diving straight into a game.

But I've got to be honest: I'm not totally open to the idea of 1) making Vyde open source, or 2) making its modability available to the general public. This might be something I just have to get over, but of the few things I take real pride in, I think Vyde's gonna be one of them. The left side of my brain is very sensitive how my work is treated.

We'll see. I'm nowhere near that point yet.

What I've been struggling with most recently is the left side that wants to design, and the right side that wants to build. I'm a professional computer scientist, and as such, the principle of "90% designing, 10% coding" was drilled into me pretty hard. But I'm aching to prototype something. Trouble is, whenever I get started on a project, it tends to grow very organically. I add features and functionality where and when I think they're needed, and not before. That's a tricky philosophy to adhere to when making a game.

I don't want to end up making a bunch of little programs unless I know they can be assembled into something greater than the sum of their parts. Problem is, I don't know how to design an open-ended system. I've seen some of the best examples of extendible systems: 3DS MAX comes to mind, as do the Quake and Unreal engines. I wrote a lot of code for 3DS MAX back in the day, and actually had to write a mod for Quake as a homework assignment at Georgia Tech. It's been a long time, though, and I'm not sure I could pull any bits from memory that would help me identify patterns in making open-ended engines.

If anyone has any pointers in this respect, please comment!

I could spend the rest of my life designing the perfect game engine. But perfection is the enemy of completion.

Do I draw the design on paper? Do I adopt well-formed UML 2.0 in Visio? I have to psyche myself up to the fact that I'll have to make many, many revisions, give up on lots of work that just doesn't work, and ultimately be frustrated by a design that worked right up until the time it should have.

It's times like these that I start to realize how overwhelming the prospect of producing an entire video game from scratch can be. I'm gonna be responsible for the design, the code, the art, the sound, the funding, the distribution, the asset management, and whatever else I don't know about.

I haven't even picked a programming language yet. And then there are scripting languages to consider.

I haven't chosen to use 2D graphics or 2.5D graphics yet.

Is now the time to make those decisions? Probably not. The more I think about it, the more I think I just need to spend some more time sketching stuff out, and writing down concrete design concepts. In the meantime, I'll continue to browse the game development resources I find, and post here.

On that note, here are a couple of images I found that seemed to remind me of the Vyde concept I'm brewing. (If you're interested at all in cool CG, see 3D Artists.)

All for now. More later. Gotta find my sketchbook.

2 Comments:

Blogger Loopy said...

Hi! I'm a C# developer at work, but I made a VB.NET game engine (or at least the beginnings of one) for fun.

Some ideas for making a game extensible: scripting. Python, for example, can be compiled into an app and is a great scripting language. Or you could make your own.

Also, text-based config like XML goes a long way towards extensibility without having to recompile. Many APIs support XML natively.

Finally, a really well defined plugin interface might work, but documentation is key! Clear, precise, and thorough documentation is a necessity for plugin developers so they can develop good plugins.

7/28/2005 07:48:00 PM  
Blogger Jeff S. said...

I dabbled in Python when I interviewed with Cyan Worlds a couple of years ago. At the time they were using Python to script what later became Uru. It seemed like a very powerful language, and indeed I've heard about its use as a game scripting engine all over the place. I'll keep it in mind.

And XML will almost certainly be the underpinnings of the game's configuration. I've never been too happy with .NET's handling of XML (why are so many XML parsers so terse?), but I know there are other engines out there to try.

7/28/2005 07:58:00 PM  

Post a Comment

<< Home