I’ve been playing Call of Duty 4 for a few days. I played Call of Duty 2, but did not play Call of Duty 3 (since it was only available for consoles).

In a nutshell, most of my thoughts about CoD 2 still apply to CoD 4. On the plus side, the sound effects and graphics are awesome (you’ll need a beefy computer, of course). The story and characters are great (if somewhat overused — it’s basically like watching a British episode of 24, with an unusual amount of dialog stolen from the movie Aliens (“I like to keep this for close encounters,” “check those corners,” etc.)).

Now for the negatives.

I finished the single player campaign in four days. And that was not four days of continuous playing, either. Two of those days I barely played it at all. I’ll say I spent a total of maybe 12 hours, tops, on it. That is a ridiculously short playing time for a $50 game. It’s pretty close to a complete rip-off, in fact. Casual gamers should not be able to finish a game that fast, even on the relatively low “normal” difficulty. (For comparison, it took me weeks to finish Doom 3 and Quake 4.)

As with CoD 2, it’s almost entirely scripted gameplay. You’re a subordinate in the story, so you spend a lot of your time following the main characters around and listening to them chat and order you to do things to complete the mission. This is punctuated by intense episodes of shooting hordes of attacking enemy soldiers. (And I do mean hordes — expect to be heavily outnumbered.) Replay value is basically zero, because once you memorize where and when the bad guys pop out at you, it’s exactly the same every time.

One notable change between CoD 2 and 4 — they made the game harder. I thought CoD 2 was too easy, so I started CoD 4 on the highest difficulty, the ”you will not survive” setting. That was a mistake. Apparently, on the highest difficulty, the enemies aim for your head and hit about 95% of the time. On the 3rd mission it became completely impossible to dodge the dozens of enemies surrounding me and shooting at me, so I had to restart on the normal difficulty. (By the way, it kind of sucked having to sit through the entire opening credits again when I restarted.) Because of the rather high death rate, CoD 4 can get pretty frustrating at times – dying and repeating the same piece of scripted gameplay over and over and over again is not very fun, and I walked away from it in disgust several times. Sometimes it’s just a matter of luck when you make it through a mission.

Here is another complaint I have with all modern shooters, not just CoD 4: Part of the reason the game is harder is that it’s impossible to see the enemies. I guess this is supposed to be part of the “realism,” but it’s hard to pick out the enemies from the surrounding environment. The color and texture of the enemy models blends in exactly with the color and texture of the buildings. (Yeah, I know, it’s supposed to be like that in real life, but hey, this is supposed to be a game.) Not to mention that the enemies and friendlies look almost exactly alike, so you sometimes end up shooting your own squad by mistake (especially when they inexplicably circle around and pop out in front of you).

I also have to mention a few words about the much-hyped game engine features. I don’t find that “bullet penetration” does much to improve the fun of the game. What’s the point of hiding when you can shoot through the walls? It’s actually rather annoying that you can’t hide behind a lot of the landscape because the enemy bullets still kill you. (And don’t even think about hiding behind a car, because they tend to randomly explode and kill you — and unlike grenades, you don’t get any warning when a car is about the explode.) Also, depth of field doesn’t do much to improve gameplay. It looks great in screenshots, but I just find it annoying when some of the screen goes blurry.. it’s especially annoying if you’re down in the grass. It’s like a constantly changing auto-focus effect. Basically these are two features that only a geeked-out game engine programmer could love.

I’ve only played one map of a multi-player game, but it was pretty fun. I’ll probably have more to say about multi-player later.

All in all, it’s a fun game to pass the time, but I deducted points because it’s basically the same as CoD 2 and the microscopically short single player campaign is a big disappointment. I give it a three… out of five.

String Comparison

There are a bunch of different ways to compare two strings in .NET. Periodically I ponder which one is “the best.” As with most things in programming, it’s largely a personal preference.

Assume we have two strings.

string x, y;

Ideally, to compare them, we just do this:

if( x == y ) FoundMatch();

It’s readable and easy to understand. If the strings are equal, it’s a match. What could be simpler? Unfortunately, it happens to be case sensitive comparison, so “Tom” won’t match “tom.” Often times we need a case-insensitive string comparison, and that’s where we need to be a little more creative. There are a lot of different solutions, the most basic being:

if( x.ToLower() == y.ToLower() ) FoundMatch();

That’s also easy to read and understand. It’s self-evident (to me, at least) that this is intended to be a case-insensitive string comparison. Unfortunately, it’s also the least efficient way to perform the task, in terms of memory and processing cycles. Two new string objects need to be created and garbage collected. If the comparison isn’t in an area of code that’s time sensitive, it probably doesn’t matter. But if you’re looking for optimal performance, here’s another, more efficient method:

if( string.Compare( x, y, true ) == 0 ) FoundMatch();

The “true” parameter indicates a case-insensitive comparison. Unfortunately, it’s not self-evident what the software is doing when looking at the code. It’s obviously a string comparison, but what kind? You have to add a comment or know what the “true” parameter means to understand it. So, while it is much better performance-wise, it’s not as good maintenance-wise.

In .NET 2.0, we get a few new options. Here’s one:

if( x.Equals( y, StringComparison.OrdinalIgnoreCase ) ) FoundMatch();

The OrdinalIgnoreCase comparison is optimized specifically for fast, non-cultural string comparisons, and it tells you exactly what it’s doing. But this is where personal preference comes into play: At this point in my programming career, I think the x.Equals(y) syntax looks funny. The good news is we get one more option in .NET 2.0:

if( string.Compare( x, y, StringComparison.OrdinalIgnoreCase ) == 0 ) FoundMatch();

I like this one best. While it is the longest in terms of typing, it’s easy to understand and good for performance. It’s obvious that you are comparing two strings (“string.Compare”) and it’s obvious that it’s supposed to be case-insensitive (“OrdinalIgnoreCase”), and it also happens to use one of the most efficient methods of comparing strings in .NET. A win-win situation all around.

If you need to be culture-sensitive in your string comparisons, you have a whole different set of challenges. I’ll leave that for another day.

Know Your Candidate Names

Fyi, to anyone voting in the Brookland district: Make sure you know who you’re voting for by name before you get to the voting booth. They just list the names on the screen, not the party affiliations or incumbency. Ie. they just list Person X and Person Y, not Person X (Republican) and Person Y (Democrat). I wasn’t expecting that when I went in. (Not that you have a whole lot of voting choices in the Brookland district anyway.)

Well, That Explains It

Oh, now I see why Enemy Territory: Quake Wars seems so similar to Return to Castle Wolfenstein: It’s an upgraded version of a free RtCW mod called “Wolfenstein: Enemy Territory,” made by basically the same people, ported to the Doom 3 engine (aka. “id Tech 4”).

Also, I just noticed that ETQW was released on September 28. I had no idea I was buying a “new” game. I thought this thing was like six months old. I’m super hip and I didn’t even know it!

I haven’t tried playing online yet. (Give me a break, I’ve only had the game for a day.) Besides, the bot AI is good enough that it “feels” like playing on a public server, but without all the lag and minus the flaming dorkwads that teamkill you and whine about their team sucking. Shockingly, the bots even say “you’re welcome!” when you say “thanks.” (Don’t ask why I’m saying thanks to a bot… okay, it’s because they say thanks to me when I give them a med pack. 🙂 Come to think of it, I did get teamkilled once by a bot, but it politely said “sorry.”

Lest you get too excited about never having to play with or against human riff raff again, the bot AI is also bad enough that you do constantly think to yourself, ”God, my team sucks” just like you do on a typical public server: You just want to strangle them and scream in their faces to quit standing around and help you because you can’t do everything by yourself! Then you have to calm down and remind yourself that you need to focus just on your own tasks and derive personal satisfaction from playing your class as best you can, even if the team still gets pounded every single time no matter what you do. (It’s sort of like going to work in real life, now that I think about it.) So all in all it’s a pretty good simulation of the pub experience.

I noticed one of the bot names is “DaBug,” a name that I swear I remember seeing back when Crayola Clan played Quake. Maybe that’s just my imagination. Ah ha… some Googling reveals that DaBug created the map CTF5 (“Da Ancient Wargrounds”); that’s where I remember the name. Ah, CTF5. I remember it well. Mainly I remember it because Crayola wasn’t very good on that map, and we lost a match once when we had to play a tiebreaker on it, after giving up a capture on the previous map (CTF4!) in the last few seconds after having dominated the rest of the game. Ah, that sucked mightily.

But I digress. I haven’t decided what ETQW class I like best. So far I rotate mainly between engineer, medic, and rocket-launching soldier. (Oddly enough, it seems like the rocket launcher is better for offense, where the big chaingun-equivalent gun is better for defense.) I haven’t had much luck with the covert ops and field ops classes. I could maybe get into the covert ops but I can’t hit a damn thing with the sniper rifle, which seems like the biggest attraction for that class. I’ve always been more of a dueler than a sniper anyway. The field ops class seems kind of useless. My artillery always gets trashed and none of the bots on my team ever feels the need to repair it (see rant above), so I can never call in any artillery.

While I haven’t played online yet, I have looked at the server list. Why are there hundreds of servers listed but 99% of them are empty except for 1 or 2 people and a bunch of bots? I only saw one server with a full complement of real people on it. Whatever happened to the days when you could pick from dozens of servers any time of the day or night? I guess the online gaming community is pretty fractured. Why would a game developer even bother with online play when there’s only going to be a dozen people playing your game online?

Daylight Savings

I just want to go on record saying that I greatly prefer the “spring forward” clock change to the “fall back” clock change. Popular wisdom tells us that we should rejoice over the extra hour of sleep we get in the fall, but what you aren’t told is that we also get the feeling of eating late and staying at work late.

What Next?

Okay I feel like it’s time to find a new PC game. Company of Heroes has gotten old. I finished the single player campaign and I’ve played enough skirmishes to have a pretty good record against the AI. So now what? I’ve been thinking maybe it’s time for another MMO.

I’ve been hearing a lot about Tabula Rasa lately (mostly from G4TV’s MMO Report, which is my new favorite Internet show (technically it’s my only favorite Internet show ever)), which was just released November 1. It sounds pretty cool… I like the concept of the tree-style classes, and it would be my first science fiction MMO. It’s tempting to grab a copy, but unfortunately it would involve driving to a store, a commitment of well over 30 minutes, and shelling out $50. Also, it costs $15 a month. I think. Concrete information on the monthly fee is very hard to find. Also, it’s an MMO, which means I’d probably be trying to do everything solo where the game is intended to be played by “groups” and “guilds” and “friends” and crap like that.

Update: Beta reviews have not been kind to Tabula Rasa. Basically they are saying it’s yet another grind-fest, which has given me great pause.

Lord of the Rings Online is a possibility, though I would be coming into it over six months late. On the plus side, that means I wouldn’t have to shell out as much money for the initial purchase (there’s even a 7-day free trial on the site). I’ve always been curious about LoTRO because it’s a Turbine game, and I have fond memories of Asheron’s Call. Again, though, I think it’s a $15/month commitment.

I’m still looking forward to Warhammer Online, but it’s nowhere near release yet. (Also, I will have to get over my general distaste for EA Games before I can even think about purchasing it.)

Perhaps I’ll wait a while before my next MMO.

Not exactly an MMO, but I saw that, this weekend, Enemy Territory: Quake Wars is on sale at Steam. I’m downloading the demo right now. From reading over the web site, it sounds suspiciously like a hyped-up version of Tribes, which I admit was enjoyable… back in 1999. We’ll see how the demo looks. (It has the distinct advantage of being downloadable on Steam.)

Update: Okay I’ve played the demo… it’s not a hyped-up version of Tribes, it’s a hyped-up version of Return to Castle Wolfenstein. Sort of a combination of a shooter and a team-based strategy game. Also an enjoyable game… back in 2002. Also – typical of id software-related games – it takes some impressive hardware specs to run at full speed.

Update: Okay I’m officially going with Enemy Territory: Quake Wars as my next game, since I’m not sick of the demo after a day. That means I should be able to get a few weeks of entertainment out of it.


Henrico County Candidates

Haven’t seen anyone post a handy list of Henrico County candidates for November 6, so here you go. Web sites linked where known. Otherwise a Google link is provided.

Board of Supervisors

Brookland District

Fairfield District

  • Frank Thornton (D) * (unopposed)

Three Chopt District

  • Dave Kaechele (R) * (unopposed)

Tuckahoe District

Varina District

  • James Donati (R) * Google
  • Reese Haller (I) Google (Note: SBE incorrectly spelled as “Resse.”)

School Board

Brookland District

  • Linda McBride (I) * Google
  • Gay Donna Vandergriff (I) Google

Fairfield District

Three Chopt District

Tuckahoe District

Varina District


Clerk of Court

  • Yvonne Smith (R) * (unopposed)

Commonwealth’s Attorney

  • Wade Kizer (R) * (unopposed)