Friday, July 29, 2005

Off Topic: Facade Broke the Rules

By the way...

After waiting for Facade to download overnight, then waiting for it to install while I was at work, I got home today expecting to be able to play it. Instead, upon launching the program I received an error message telling me that my computer was too slow to run it. Apparently it requires a 1.6GHz processor, and 1.4GHZ+ processor wasn't up to scratch. I have seen no evidence in the form of screenshots or feature lists to suggest that it requires that much horsepower. I don't care what kind of natural language processing or emotive engines they've build into the thing.

It's like telling a student they can't take a class because they failed to recite 30, but not 29, numbers from memory.

When a warning on a site says a program will not run on a processor slower than 1.6GHz, even when italicized, a person who's after a new game cannot be expected to take the warning literally. From a usability standpoint alone, all anyone wants is the download link, and that's all anyone will look at. What are you accomplishing by placing such artificial constriants on the acquisition process?

If I gave up on a project whenever I'd been told something wouldn't work with my current equipment, I'd have accomplished very little by now. Traditionally, I've been unable to afford the equipment necessary to run most of my preferred tools at their peak condition; so I make do. My best friend once said that if the computer has taught our generation anything, it's patience.

I dare the developers to prove to me that the lack of < 0.2GHz will prevent me from studying the technology behind their work. If the game runs slowly on my machine, then so be it. If I have to disable machinery in my OS, so be it. If I have to exhaust my RAM, then I'll exhaust my RAM and start thrashing the hard drive. It is presumptuous and arrogant to think that I will be unable to derive value from this program because I miss the mark by 12%.

What makes me even more mad is that there was a Georgia Tech brain involved in this. This shouldn't surprise me.

It is a sin to perform this kind of test. Developers may not use unreliable benchmarks as a gauge to determine whether a program will run acceptably, and they most certainly may not refuse to run a program based on that measurement. I, the user, will make the decision as to whether the program runs acceptably. If I invest the time to download the 800MB monstrosity using a dubious BitTorrent distribution method (it's slower than Christmas, but I'm helping other users get shafted...), then I expect to be able to run the executable without being met with a damned decree!

It's a shame too, because now it's unlikely I will remember to look at Facade once I upgrade my processor.

Don't tell me what I can't do.

Off Topic: HD Fixed! (GOD DMA PIO!)

I finally discovered the cause of all my PC latency. It turns out that Windows XP had knocked down the transfer mode of my IDE controller from Ultra DMA 5 to PIO, and never told me. I performed a fix I found on the internet, and my PC's been good-as-new all night.

(See the next post for my rendered opinion on why software should not try to outthink its user.)

The moral: be sure to check your IDE controllers' transfer modes and ensure they're not using PIO. Chances are better than average that Windows might have tried to outthink you. I checked two computers at work today and both had the same problem.

With my new found performance I fired up the Half-Life 2 demo again, and it worked way better than before. I played through both levels with no appreciable latency. I'll have more to say about Half-Life 2 in an upcoming post. I found it very immersive and want to implement some of the "common sense physics" it demonstrates into Vyde.

BTW, does anyone know why Blogger's Preview mode looks so bland? Is there a stylesheet that governs the preview? I'd much prefer to get a WYSIWYG preview rather than what I'm seeing instead.

Thursday, July 28, 2005

Off Topic: Templates & Cool Stuff

Tweaked the template for the blog a bit. It was way too narrow for my taste and the sidebar wasn't floating like it should have. I hope this version makes better use of screen real estate.

(I read almost 200 pages of Jakob Neilsen's Designing for Web Usability today while waiting for Windows Vista Beta 1 to install. I've been infected.)

(You know, you'd think a book subtitled "The Practice of Simplicity" would have less than 400 pages.)

Added links to my Furl and my Stumbles in the sidebar.

In other news, I'm currently downloading the 800MB "Facade" at the BitTorrentastic rate of 11KB per second. I read about this game (?) in a Gamasutra article today and saw that it was co-developed by a fellow Ramblin' Wreck, so needless to say I'm curious to see what it's like.

Another interesting article on Gamasutra about storytelling in video games. I've been thinking lately about whether to add story elements to Vyde out-of-the-bo... um... bitstream... ? or whether to leave it a "sandbox" that players can build and distribute stories for. More on that in future posts.

Everybody should read Donald Knuth's Things a Computer Scientist Rarely Talks About, a very entertaining read. I'm actually reading it before reading 3:16: Bible Texts Illuminated, and it gives me something to look forward to.

Also, have fun with the Zombie4. :) My friend Eric found this one after I showed him the Zombie Infestation Simulator. It made me think that Vyde might have some plague elements that could be fun. >:)

And a new favorite of mine: Interactive Buddy. What's cool about this toy is that there are so many places you can go with it. I can think of at least a dozen things I'd like to add to this one, including stick-figure skeletons, armor, and physical fitness, complete with exercise equipment.

I use Bloglines to read my RSS feeds. I imagine adding Vyde to it would be very simple. :)

Also found Aardvark today, a CSS inspector for Firefox. Very cool.

The Windows Vista Beta 1 would not install on Virtual PC today. It crashed five times in three different ways throughout the day. Gave up on it finally when somehow the installer got confused on how to format the drive (which it didn't have a problem with the first time I tried it).

If anyone can point me to last week's episodes of SG-1 and SG-1: Atlantis, please do. My stupid cable box reset while I was out and my TiVo recorded 2 hours of high-quality black.

Wednesday, July 27, 2005

Features & Requirements: 3D

(First off, does anyone know how to tame Blogger's WYSIWYG editor? Why must it specify font size every time I want to put something in italics?)

Time to start listing some of the features and requirements I've been thinking about. I want to get them written down so I can start brainstorming about what is worth doing and what is overkill. I'm going to devote a separate post to each feature/requirement.

3D is the biggie. I put it here as a requirement, but it's the one I'm most unsure about and have been spending the most time thinking about. Thing is, I'm a 3D guy by heart. Years of using 3D Studio (back to the DOS days baby!) taught me that I'm pretty good at modeling and texturing cool-looking things, and my computer graphics training at Georgia Tech taught me most of what I need to know about maintaining and manipulating a 3D scene in real-time, programmatically. I'm actually fairly confident that I could build the necessary engine to support a decent 3D scene, but not so sure about the time required to build all the assets. Even constructing a single tile — say a piece of hallway — can be a lot of work. 'Cause a single piece of hallway is going to have the basic wall shell, then adornments like rocks & pebbles (to hide sharp edges), then more other decorations like wooden bracing and hanging vines and whatnot. I know that clever scene building can relegate the adornments to separate passes, and therefore separate assets, but still, for a game of this scope we're talking about a lot of 3D work just to get basic artwork in place. Not only that, but there's the matter of a 3D Studio license. (Tried Blender. Really gave it an honest college try. But I can't jive with it.)

One alternative is 2D (like Abuse 2D). If I could think of a way to build an engine that could swap out 2D for 3D with the change of an XML file, I'd probably do that, if for no other reason than to have a proof-of-concept written more quickly. The engine could be like Super Metroid's, even with cool effects, but I worry that it wouldn't be as engaging. Dynamic lighting would be very difficult in 2D. And I get the suspiscion that before this adventure is over I will have started dabbling into low-level GPU effects like pixel and vertex shading — that's something I've always wanted to learn. Then there's the artwork. I just know I'd end up building the artwork in 3D then rendering it to the requisite 2D sprites. If only I could draw artwork like we've seen in Metal Slug. That game really captures the look I'm after, but I've never attained that level of stylization.

Another alternative is what I'll call 2.5D. This would involve much more rudimentary geometry combined with 2D sprites. The player, NPCs, and other objects in the world would be animated sprites strategically positioned in the Z-plane to not interfere with each other. I wouldn't go as far as, say, Paper Mario; I'm thinking something more like Dungeon Keeper I's approach. This approach has a hidden benefit: a basic 3D engine serves as the foundation, and that 3D engine can be enhanced over time. If the OOD of the project is clever enough, the sprites can be swapped out with 3D models as the assets (and skills) become available. This approach lends itself well to using placeholder art while I work on the low-level engine mechanics. With the help of Photoshop (oh please, Paint.NET, please enhance your feature set with all haste!), pencil sketches could have their backgrounds keyed out and be mapped onto some quads, serving as entites in the environment. That might actually have some stylistic merit...

Overall I think building a solid 3D engine will be most gratifying. But it can take a long time to make one, and even longer to populate it with assets that are up to my standards. Perhaps a 2.5D approach is the way to go. It serves as an attainable first step towards what I really want, and lends itself well to organic growth.

If I could even pull off something as simple (!) as Dungeon Keeper's engine (turned on it's side), I think I'd be happy with that — that would make a good first milestone. It had a lot of the features I'm after: a 2D playing space rendered in 3D with lighting effects, clever adornments, and dynamic elements all comprising a map that can be tunneled through to build a world.

Diggles comes to mind again. That game's engine might as well have been Vyde Alpha. It even includes things like ladders, elevators, and random tunnel & room generation.

Yep, Dungeon Keeper and Diggles shall serve as engine inspiration for this project. I wonder if I can get Dungeon Keeper running in XP...

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.

Sunday, July 17, 2005

Development Environment for Vyde

I regret purchasing Visual C++ .NET. I will probably never use it. I reached this conclusion last night when I tried to play with PopCap Games' SexyApp framework, written in C++.

I can't imagine that the behavior I get out of VC++.NET is intended. IntelliSense just seems to, well, not work correctly. It confuses declarations with definitions (and often can't even identify definitions), it can't find symbols, and the drop-down lists that are supposed to help you navigate your code just aren't wired to anything. They just don't work -- click a symbol and the cursor doesn't move.

I had this problem inspecting the Quake II source a while back, and even found an old Usenet post about it.

If I didn't know better, I'd say something was corrupted. But I've tried clearing out the IntelliSense files, and even tried reinstalling the IDE. I just can't get it to work as expected.

So! What am I likely to develop Vyde in? Not C++. I know that any game worth its salt is supposed to be written in C++, if for no other reason than the efficiency boost the compiler brings to your binaries. But I have to wonder where C++ is going as a tool.

Microsoft is obviously not devoting the same amount of attention to C++.NET as it it so C#.NET and VB.NET. (When you think about it, do C++ and .NET really make sense together?) And then you have things like Managed DirectX, which are no doubt supposed to encourage development on the .NET platform.

And having done some graphics work on .NET this week at work, I can't say I'm totally turned off to the idea of writing a game in it. If nothing else, it'd be an interesting experiment. I'm all about ease in this project: I will take time to build the requisite amount of code, but I do not want to spend time wrestling with the tools that are supposed to make development easier.

Part of me wants to write Vyde in C++, but that same part of me can't come up with a knockout reason for doing so. I really don't think C++ has an indefinite lifespan, and the tools for writing code in it are just lousy. I like IDEs; I believe in IDEs. But I haven't seen one yet that makes C++ development any easier than writing in Notepad, including Visual Studio 2003, which is just sad. I worry that writing the game in C++ will date it, and make it harder to add new features (or integrate new technology) later in its admitedly drawn-out lifecycle.

One factor that weighs heavy on this dilemma is the crop of existing engines out there. Almost all of them seem to be written in C++ (and this makes me think that 1) I'm missing something, or 2) too many zealots think C++ is a requirement for game development). But the idea of writing my own engine, from scratch, appeals to me. After all, this is supposed to be a learning experience.

I haven't finished the webcast series that I started -- the one on game development in C# + Managed DirectX. I've been playing Thief III instead. Once I'm done with that game I think I'll write a big review of it -- things I think should've been done differently -- and work on assimilating that experience into this project.

Sunday, July 03, 2005

Webcast Review: Basic Programming Concepts and Introduction to C#

Just finished watching the first webcast in the "Learn to Write C# the Fun Way" series at http://www.microsoft.com/events/series/msdnvideodev.mspx, titled "Basic Programming Concepts and Introduction to C#".

It was, as expected, very elementary, targeted strictly towards non-programmers. Some interesting factoids about the game industry, particularly sales figures and statistics.

Tried downloading the demo of the game, but when I run it I get a TypeInitializationException. Hopefully when we get to building the engine it will work better. This series is pretty recent -- May 2005 -- so I don't imagine this is a fundamental DirectX version problem or anything. We'll see.

There are 8 webcasts in the series, and it appears that each one is about an hour long. This one could have gone quicker if there weren't so many polls and redundancy.

Back In the Habit

So here's my dilemma: I've got this idea in my head that I want to realize into a video game, but now that I have some free time after moving to a new job, I'm finding that I want to play video games more. I fired up SimCity 4 the other day and have been having a lot of fun with it, and just got Thief:DS working today. Never finished that one 'cause work got to be too heavy. Anyway, the desire to play games is coming back, and its tricky to balance that with the desire to make a game.

I did make some progress Friday night. Found a series of webcasts on Microsoft's site entitled "Video Game Development: Learn to Write C# the Fun Way." Looks intriguing. Downloaded all of those and am about to watch the first one. The idea of writing this game using Managed DirectX is appealing, and the idea of learning a new language (C#) on the way is appealing, too.

There are several new links in my Furl archive, and I keep adding more.

Off Topic: Got Thief:DS to work again!

My computer is still acting odd, but at least I was able to get Thief:DS to run again. Thief wasn't starting correctly, hanging on a blank screen when I ran the executable. Turns out I had DirectX configured to run in debug mode on my system, and that was causing the problem for whatever reason.

Still got that weird interrupts problem, though. I tried disabling USB in my BIOS, per several internet posts that suggested it can be the cause of excessive context switching, but it didn't seem to solve the trick. I worry that my hard drive really is going bad: no matter how many times I chkdsk, I get errors every time, and chkdsk /f reports no bad sectors. Maybe my IDE controller is hosed, or my motherboard is dying. Groan.