& The Brad Hole

March 26, 2009

Patch News

I don't pay as much attention to my blog as I used to, but I just spent a few minutes catching up on the comments you folks have left in the past few months, so rather than try to address some questions in the comments, I'll just update here.

Call of Duty/CoD United Offensive: I handed off the patch to our QA guys for testing last week. It shouldn't be too much longer - probably weeks, not days or months.

Call of Duty 2: I've started looking at a patch for this now that the CoD1 stuff is behind me and I have more time away from the main project I've been on. We originally handed this port off to an outside house, so I do have to get up-to-speed a bit on it, but the core code is eerily similar to CoD1 so that's a plus. The biggest issue with this is that it hitches badly on the Nvidia 8600/8800/9400 cards, which shipped after our port did. I've identified the issue (the game is using Vertex Array Range in a way that causes trouble for the NV G80 driver), so that's good to know. Fixing that should also bring up performance in general for all the other cards. A few people have mentioned that the graphics are wrong for skin/water on the Nvidia 8600, but I'm not seeing that in 10.5.6, at least on the starting level. I'll have to research that some more.

Knights of the Old Republic: This was reported to run like ass on the Radeon HD 2600 even with the Universal Binary patch. I know exactly why this is: the HD 2600 doesn't support the OpenGL extensions that KOTOR looks for to be on the ATI "fast path", so it falls back to some really slow rendering. Specifically, ATI_text_fragment_shader (an extension that predates ARB_fragment_program) is gone. I had to update the shader code in Call of Duty to address this same issue, so this is really more of the same. I don't have a timeframe for doing this, other than after I finish the CoD2 patch.

Occlusion query support for other Q3 games: a2daj smartly pointed out that there are some scenes in the Jedi Knight games that take a big framerate hit when bright lights/flares appear, and this also uses the same code I recently rewrote to use occlusion queries for Call of Duty. Love to fix this as time permits, but I think Aspyr is getting tired of me constantly patching Jedi Knight/Academy. ;-) I suppose the same must hold true for Alice as well - both the flare performance and the patching frequency!

More Mac Games: Yeah, we announced Guitar Hero: World Tour for Mac and PC the other day, and we do indeed have more Mac games in the pipe and of course actively in development, just not announced yet. I guess they'll get announced as they get closer to shipping. I wish we'd go back to the "Westlake" style of codenames for unannounced projects to indicate just how many we're doing and show some forward progress, but I think that notion lost traction somewhere along the line.

March 07, 2009

Killed by twitter

Steven Frank of Panic once said on his Twitter account, "Twitter: Kills blogs dead" and that's about true. Since I've increased my "tweeting" or whatever it's called, I haven't had much interest in posting blog entries -- not that I had much interest before. 140 characters is sometimes harsh; I'd be happier with 256 or some similarly slightly-larger limit, but c'est la vie. A thought pops in my head, I type it out if it's not totally inane and then my life moves on.

With all that said, onto some random news.

I'd really thought we'd have the Call of Duty universal binary patch done by now. It's been sitting idle for months now. I planned to wrap up the loose ends when I got done with my current main work project as it has ties to my CoD work that I can't go into here because it's not announced yet. But the schedule has been a harsh mistress and has slipped, and so I've used that as an excuse to not finish up the UB. At this point, I need to investigate some issues with auto-downloading not working for some servers in the MP app and make sure PunkBuster *really* works.

On the gaming front, I played and enjoyed Fable 2 a great deal. Beth also loved it, probably more than I did as she's played through it completely once and partially since then several times.

I've also played through Fallout 3, which I thought was pretty good. It didn't totally blow me away, which is probably because I'd set my expectations a little high based on the hype. I plan to revisit it once all the DLC is out, perhaps I'll wait until the inevitable "Game of the Year" edition that contains all the DLC expansions and save a little money, just like every prior Bethesda game. Given that the DLC is currently 360-only, I also suspect that PS3 users will get in on the expansions in the inevitable GotY edition too. Call me Captain Somewhat-Obvious.

Right now, I'm playing through Saints Row. Confession time: I never played Grand Theft Auto in any form, so I have no basis for comparison. That said, I'm enjoying it a ton, probably because it's shamelessly over-the-top and does not take itself seriously at all.

My current work project involves 2 next-gen consoles. I guess technically they're current-gen but people seem to keep calling them next-gen. Anyway, developing for one of them is like working in some kind of tropical paradise where beer flows like water, and developing for the other is not too far from back-breaking day labor. I'd sure hate to break some kind of development NDA and say which is which, but maybe you can guess.

January 02, 2009

Star Wars Jedi Knight/Jedi Academy patches

As some of you who follow Aspyr's Mac games may know, we released Universal Binary patches for Jedi Knight 2 and Jedi Academy last year before I left for Apple. For the most part these worked fine, but they contained some bugs that slipped through: notably, your lightsaber would not block blaster shots. All of these stemmed from a quirk of the random number routines that I detailed in prior blog posts.

The games are now patched to fix those and the patches posted our support site. (They've been up for several weeks, I've simply forgotten to mention them here.)

The Jedi Academy patch is here and the Jedi Knight 2 patch is here. They're labelled as "beta" patches because they have not gone through the full suite of QA tests. Our QA guys have mainly played through them both once or twice and verified that the issues that I marked as fixed are really fixed. I don't see these patches linked on Version Tracker or MacUpdate or even MacGameFiles for whatever reason (a failure to mention on our part, I suppose) so for now our support site appears to be the only place to grab them.

I don't expect any issues remain, but your mileage may vary. :)

The Call of Duty 1/United Offensive Universal Binary patch is still coming. I have one or two minor bugs to work out that I've simply not had time to look at, but it shouldn't be too much longer. I suspect, like the Jedi patches, they'll be labelled as beta as they're not going to get a full QA sweep either.

December 16, 2008

The Great Console Debate Post

At the start of the year, I jumped into this generation of game consoles and picked up a PS3, an Xbox 360 and a Wii. I had no emotional investment with any of them beforehand, and I frankly don't care who "wins" the console war.

With that said, it became clear in a short time that each of the 3 consoles are headed in entirely separate directions. Of the 3, I believe the Xbox 360 is the overall best choice for this generation. This post will likely get long-winded, so click on for the meat. The bulk of the conversation is between the PS3 and the Xbox 360, as the Wii is both in a different world in terms of sales (astronomically so) and hardware and feature-wise (to the Wii's great detriment).

Continue reading "The Great Console Debate Post" »

December 13, 2008

"Hey sweatie!"

I'll admit it: I'm Home-curious. I downloaded the new Playstation Home social app for the PS3 yesterday and took it for a spin. Thing is, I don't care for Second Life, which is essentially what Home is, and although I'm on Facebook, I honestly don't see much appeal in social networking things. As the days to the Home launch grew closer though, I had an idea: I'd create an avatar that was an attractive girl and see what happened. I've heard stories that women in male-dominated areas (like video gaming) frequently have a rough time of it, so I was curious what kinds of things would happen in Home.

I created an avatar that looked not unlike "Claire" the cheerleader from Heroes (or Nicole Eggert circa Baywatch), with blonde hair, a red baby doll top and a red skirt.

Read on to find what happened.

Continue reading ""Hey sweatie!"" »

December 05, 2008

Why I'm going to hell, part 317

On most Tuesdays, Beth and I go to a sports bar near here called Padre Murphy's for their 2-for-1 burger night and some beers. It's a pretty good local restaurant, and they also happen to offer off-track-betting on geyhound dogs and horses. I think we've only ever placed 2 bets between us, just for fun. The restaurant has a large outdoor area in front where you can sit and eat outside.

We tend to see some of the same people there, some of whom are memorable. One of these is a character we've dubbed "Hot Wheels". He is a hunched-over older guy with a wheeled walker who gambles a fair amount, based on the trips he makes (slowly) to and from the betting cages. He's fairly distinctive, enough to earn the nickname at least. I believe I've seen him with an oxygen tank on occasion, but I won't swear to that.

One fine Tuesday evening a few weeks back, Beth and I were entering the restaurant via the sidewalk that runs between the outdoor and indoor area. As we walked towards the entrance to the inside, 2 things happened at once: "Hot Wheels" appeared in front of us and started wheeling towards us, and we heard the "first call" bugle call that plays at post time for the horse race over the monitors. The timing was uncanny.

I swear it took every bit of energy to maintain a straight face and walk past him as he was heading towards us. Had Beth made eye contact or done anything, I'm sure we both would have lost it.

December 03, 2008

Gaming Roundup

When I play video games nowadays, the bulk of my time is spent on the Xbox 360. I've been meaning to write a blog entry about that but it'll have to wait. In the meantime, here's a brief rundown of what's caught my eye.

Age of Booty: $10, Xbox Live Arcade. I've been getting a lot of bang for my buck out of this. I've completed the single-player campaigns, probably won't ever play online (that's not my bag, baby). It's a real-time strategy game on a hex grid where you go around blowing up enemy pirate factions and upgrading your ship. Simple to play in the same way that a Doom deathmatch is.

A Kingdom for Keflings: $10, XBLA. Another great game, but replayability is pretty low. Once I finished my "kingdom" and unlocked all the achievements (a weekend's worth of work), I wasn't sure where to go next. It's basically a real-time strategy game like Warcraft or Age of Empires, only without any conflict or fighting. Beth loved it.

Fable: The Lost Chapters: Xbox. I've had this for a while and have been slowly but surely playing through it in preparation for Fable 2. I finally finished it over the week of Thanksgiving. My saved-game timer says I put in a little over 20 hours, but it didn't count the hours spent watching areas load, nor the hours I had to replay when the game would lock up and I'd have to restart. I liked it - enough to want to play Fable 2 - but I didn't love it.

Assassin's Creed: Xbox 360. I'm currently working my way through this. I think I'm about halfway through. Visually it's spectacular. Weird thing about it is that I see a lot of graphical effects (like their 3-tier level-of-detail self-shadowing) and pat myself on the back for thinking I know how they implemented it. I really enjoyed the sci-fi twist to it - t hat was totally unexpected. That said, it's starting to get pretty repetitive right now. I think they ran out of gameplay ideas halfway through and just started repeating the same ones over and over to make the game long enough to justify the price. If it had more variety in the mini-missions, it'd be a great game instead of a good one.

December 01, 2008

I have gas

We bought a bed from Ashley furniture in mid-August, and as part of the deal, we received "$300 of free gas!" with the usual asterisks and restrictions that accompany such an offer.

The deal is that we get coupons for $25 in gas for each month from September 2008 to August 2009 if we send in receipts for that month totaling over $100. There is an additional restriction that all gas during the 12 months be bought at the same chain - we chose Chevron because there are 2 stations close to our house. This was easy to do at $3 and $4 a gallon, less so at $1.80. I work from home and don't drive all that much, and Beth is going to ASU West (3 miles down the road) and takes the bus downtown to jury duty on Tuesdays and Thursdays.

So this leads to a dilemma. I don't want to buy gas just to waste it, but from a purely selfish economical standpoint it behooves us to try and reach that monthly $100 plateau if we're close. I also don't really want to see gas prices go up again, but I can't deny that an increase helps us some. Our typical full-tank fill-up was in the mid-$30's in October so all it took was 3 fill-ups to hit the voucher level. That was doable with our usual driving patterns. It's going to be harder to sustain that if gas prices hold steady or drop. We drove down to Tucson for Thanksgiving with a full tank, so that gives us the opportunity to fill up again early in December without guilt.

Of course it's stupid to really complain about this problem as we win either way, but I've played enough video and board games about optimizing production to feel irrational twinges about the whole thing.

November 26, 2008

Flare-ups

Without going into too much on the "why", I recently found myself with a need to rewrite the way Call of Duty 1 redraws flares. The original game is based on the Quake 3 engine, and so the flare method is part of id's implementation.

In the original implementation, if you want to render a light flare, you draw your scene, then check to see if there are any lights with flares visible. If so, then you render the flare last so that it draws over everything else, like a real flare would do. Remember that this is the Quake 3 engine (i.e. idTech 3) circa 2001, so it predates a lot of modern OpenGL. The way this was accomplished back then was to take the bounding box of the light flare, then call glReadPixels on the depth buffer for that rectangle. You would then compare the depth values in the entire rectangle with the depth value of your flare to get the percentage that was occluded. You can then draw your flare (or not, if it's fully occluded), varying the intensity by how much of it was visible (i.e. the number of non-occluded fragments in your glReadPixels rectangle).

But there's a problem with that approach...

Continue reading "Flare-ups" »

November 04, 2008

Who let the dogs in? Me! Me-me-me!

Some background: we have 2 dogs (3 years old) and one cat (12 years old). Ever since we got the dogs, we haven't had a way to get the dogs and cat(s) to get along, so our eventual solution was to erect a baby gate in our hallway, separating the bedrooms/utility room from the rest of the house. The cat(s) had the back half of the house, the dogs the front. It worked reasonably well. Our remaining cat, Bagheera, is Beth's whom she has had since before we met.

At night, we let the dogs outside, take down the baby gate, let the dogs into the master bedroom and let the cat have the run of the rest of the house. The sound of taking down the baby gate is distinctive and causes the cat to leave the master bedroom in a rush. It's this last part we've gotten a little lax with, and last night that came to a head. I took down the gate, gave it the usual rattle, put it back up to block off the master bedroom from the rest of the house and let the dogs in.

The dogs, being 3, have a pretty high level of energy so they burst into the bedroom with gusto, and usually jump on the first human they see. Last night it was Beth, who was in bed. As I went into the bathroom to refill their water dish while they assaulted Beth, I noticed Bagheera was lounging on the sink being stealthy and quiet. Uh-oh.

Here's the rub: Bagheera is, at the best of times, barely tolerant of humans and openly-hissingly-antagonizingly hostile towards the dogs. During the day, he charges the baby gate if they get anywhere near it, hissing and yowling the entire time. One dog, Barney, is reasonably terrified of him. The other dog, the smaller Kermit, is a little less scared and more aggressive than his bigger brother. He has "short-man's complex."

So with the dogs in the bedroom and the cat on the sink, the problems began. I quickly picked up Bagheera and ran towards the door, hoping to toss him over the baby gate into safety. I got about half-way before he clawed my hands and chest deeply enough to draw a fair amount of blood while attracting the dogs. I was forced to drop him, and Kermit immediately pounced on him, pinning him to the ground while biting at his neck. I yelled and Barney backed off to the bed but I had to pull Kermit off, and Bagheera ran back into the bathroom behind the toilet to relative safety. I was able to drag Kermit pretty easily outside (he's not that big) and I got Barney outside by dragging him off the bed, where he was cowering, afraid to move.

With that done, Beth and I tried to extricate Bagheera from behind the toilet. It's surprising how much resistance an 11 pound cat can put up. After considerable yowling and a fantastic amount of struggling, Beth was able to wrap him in a towel and carry him out. He hid in her office for a while and she was able to determine that he didn't appear to have any significant injuries. After resetting everything, we let the dogs back in and by then they had fortunately chilled out. We found that Kermit did have a scratch on one of his front paws, but it was minor.

The lesson learned here is twofold: first, that we must always check and verify that the cat is out. We can't assume that he'll run out when he hears the gate go down (which he does 99% of the time). The second is that there's simply no way we can ever hope to integrate the cat with the dogs. We'd flirted with the hope that maybe someday it could work, but we're both sure now that it'll be impossible. There really is no room for mistakes when it comes to the cat getting trapped in the future. Kermit has consistently demonstrated that, given the chance, he'll aggressively go after the cat. With no human interference, Barney would likely join in.