| Main |

Dumb programming from Aspyr

When I bought Quake 4 for the Mac, I found that it didn’t work from my normal user account. Why? Well…

If, after you first try to run the game, you look in ~/Library/Application Support/Quake4, you'll see a folder called q4base. Inside this folder is a bundle, game.so.bundle. The trouble is that Aspyr, who put it there, clearly think that a bundle should contain a folder called contents. It shouldn’t. The folder should be called Contents (note the capital letter ‘C’). And inside it should be a folder called MacOS, not a folder called macos.

Before you say “well you shouldn’t be using a case-sensitive filesystem”, which is exactly what Aspyr said when I reported it to them, my Mac is not using case-sensitive HFS+. My home area is on a server, however, and that server is using a case-sensitive filesystem. Aspyr tried to claim that this wasn’t supported by Apple, but of course it is… Apple make a big song and dance about how good Mac OS X is at integrating with other systems, and most Unix-like server systems use case-sensitive filesystems.

Anyway, you’d hope that they’d fix this problem, as it’s only a case of renaming a couple of files, right? But no, it’s still not fixed in the just released Prey Demo. So, if you want to get Quake 4, or Prey, or either of the demo versions working and your home area is case sensitive, here’s what to do:

  • Run the game once. It will display its splash screen and then terminate (because it can’t load the bundle, because the bundle is invalid, because the names of the internal folders are wrong).
  • Go to ~/Library/Application Support/name of game/q4base.
  • Right-click game.so.bundle.
  • Choose “Show Package Contents”.
  • Rename “contents” to “Contents”.
  • Open the “Contents” folder.
  • Rename “macos” to “MacOS”.
  • Run the game.

The most stupid thing about this entire business is that the one case-sensitivity bug in these games was added by Aspyr! The Windows programmers involved with them got it right, but the Mac programmers, whose operating system does support case-sensitive filesystems, got it wrong.

(By the way, if you use this technique, you’ll need to re-apply it if you download an update for either game.)

Trackbacks

TrackBack URL for this entry:
http://alastairs-place.net/movabletype/mt-tb.cgi/124

Comments

Hah. This is amusing. I had similar experience back when it was mostly westlake dealing with (the current Aspyr person once ran Westlake). Tony Hawk for Mac OS X didn't support controllers. They said they wouldn't until Apple added it to OS X. So I emailed them and pointed them to the HID sample code. They said it wasn't compatible with the Carbon CFM applications. So I emailed them and pointed them to the CFM Call Mach-o sample code from Apple. They then told me not to email them again and they'd only add it if their publisher gave them money and told them to add it.

Basically, it all boiled down to the fact they were in it for the money, not for the best Mac OS user experience.

Oh, also, having the wrong case for parts of a bundle can fail even on Case-insensitive file systems when using things like NSBundle/CFBundle. However, it's very random and *very* hard to track down when this happens.

Yes, I thought that there were problems on case-insensitive systems (I’m sure I’ve seen them myself), but it seems none that affect the Quake 4 engine.

I’m not really sure why they’re bothering to construct a bundle anyway, since all they’re doing is trying to load the game logic dylib. You can even do that without saving the file to disk first, let alone building a bundle structure around it.

What I find most infuriating though is that Aspyr are more interested in inventing excuses for not fixing it, I think, than they are in fixing it. Maybe I’ll complain at id software or 3D Realms and see if they can organise some attitude readjustment :-)

Oh, I wanted to elaborate on the issues CFBundle has on case-insensitive file systems. If you create a CFBundle using a path, then try to make it again using other CFBundle functions, the bundles could return not equal since they do a case-sensitive compare on the file paths. So it'll "randomly" fail depending on how the CFBundle was created the first time it was used in a given program.

But yeah, using a bundle for this seems completely superfluous, much like a third nipple.

Post a comment

If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thank-you for your patience.

(Your e-mail address will not be displayed or included in any pages served on this site; nor will you get any spam as a result.)

A live preview of your comment will be displayed below. It should refresh automatically when you stop typing, but if not then the “Preview” button above will update it.

Live Comment Preview