Archive for December, 2007

Victory is mine

December 31st 2007

So I bought the game Galactic Civilizations II a long time ago. I was able to play it on my wife’s laptop and I figured it had to be pretty easy to get at least the major parts of the game running in Wine since it doesn’t have the copy protection code which normally breaks games nowadays, and it didn’t look like it was using any fancy DirectX features.

Needless to say my first attempts to make it work in Wine didn’t go so well. I tried off and on over that month and eventually just gave up, playing it on the laptop when I had time. I basically never play it now, as moving over to the laptop is just too much of a hassle.

Last night I decided to try again. It took some 6 hours and probably the most debugging I’ve had to employ over this entire year on a problem, but Victory is Mine! :)

Link to screenshot of GalCiv2 running in Wine

The first problem I had is that after patching the game to the latest version, 1.4x, it required activation (what Stardock uses for copy protection instead of CD copying controls) in order to start. This is normally pretty easy, and you can activate by email even if necessary. But the process always crashed. I first tried copying over the authentication certificate from the laptop but it’s tied to the machine you’re on.

So I then tried bringing down the network interface, running the activation again and trying to get the activation request so I could email it to Stardock. That didn’t work either, as it crashed just before I got to that part.

Getting fed up I decided to use one of the Wine debugging megaweapons, relay tracing. This option causes Wine to mark the entry and exit from practically every single procedure call in Wine, including function name, module, and parameters and return codes. You can filter this all down to just the module you need but I didn’t know where the problem was. 70 megabytes of a relay log later, I had something which I could look at.

It took a bit of deductiveness (i.e. searching for the last place where the serial number is used, which is probably close to the crash location) but it turned out the error was in advapi32, in the cryptographic code. Looking at the Wine source code, it looked like the code was trying and failing to read a required Registry key. But how did Wine install itself without setting up required Registry contents?

I tried running wineprefixcreate (which among other things, sets up default Registry contents) but that didn’t help. Eventually a bit of Google searching for the registry key name (Cryptography\Defaults or something like that) resulted in a hit on the rsaenh.dll in the Wine source, in the DllRegisterServer() function. That looked like it created the required keys. Hmm.

From my past life developing Win32 applications I knew that OLE registration for a DLL was typically handled by running rundll32 and passing the DLL name and entry point (DllRegisterServer in this case). wine has that tool as well so I tried running it and… success at last!

Now GalCiv2 wouldn’t run because it said I didn’t have DirectX 9.0c. I tried following some instructions I found to install DirectX 9.0c DLLs into Wine. It turned out I had to use the rundll32 program again on the wintrust DLL to get the installer to do anything. It would still error out though.

At this time I figured there were probably many DLLs that needed to be registered. So I took the rash action of going to my /usr/lib32/wine directory and registering every single DLL in there.

GalCiv2 still didn’t start up, but that’s because I forgot to undo some of the steps I took in the previously mentioned DirectX 9.0c install guide (namely, using native instead of builtin versions of some DLLs). Once I undid that GalCiv2 started up just fine. I haven’t actually played it yet. It was so late by that point that I immediately went to bed. Now I need to see if the game can actually be played in Wine.

I also wonder what part of Wine is supposed to register DLLs (i.e. installer, on first run, or what?) and figure out why it never happened here.

Posted by mpyne under Computing Troubles & Personal & Screenshots | 7 Comments »

Qualified in submarines

December 18th 2007

So yesterday I completed my submarine officer qualification board. Today I had my dolphins pinned on me by my wife. It’s different having them on, I’m still not really sure what to make of it. For better or for worse you’re looked at differently by submariners if you are qualified in submarines. Unlike many other badges and awards you may encounter this one is still generally awarded only to those who deserve it and have completed all the applicable requirements.

In my case due to circumstances I had a patrol pin with 2 gold stars (indicating 3 alert deterrent patrols) without dolphins. Normally this is the sign of a junior officer who does not have the trust of his captain as you typically get dolphins after your second patrol. In my case the pin and first star were for half patrols, but it’s nice going from dirtbag to experienced junior officer in 15 short minutes this afternoon.

While researching this entry I came across a letter from an SSBN commanding officer briefly describing what it’s like to serve on an SSBN, which I thought was pretty good. You can read it at http://www.news.navy.mil/navydata/cno/n87/usw/issue_5/confessions.html if you’re interested.

Posted by mpyne under Navy & Personal | 9 Comments »

I think I’m allergic to footballs

December 10th 2007

So I went to a football game today with officers from my ship. Throwing the football before the game, I somehow managed to injure the ring finger on my left hand on a catch. I kept it iced during the game and was able to flex it and everything but it never quite stopped swelling and it eventually bruised really badly.

I have it splinted pretty heavily right now in order to be ready to go to Medical in the morning tomorrow. The sad thing about this is that this is the second time I have injured my hand catching a football (same hand even). When I was in high school I was playing catch and had the ball hit my left pinky instead of my hand and force the outer two finger bones over the innermost one, which I then had to pop out. That hurt a lot, and never fully healed.

I think I’m going to have to stop playing catch with real footballs from now on or something, this is crazy. I’m pretty sure I didn’t dislocate the finger this time, but judging from the continuous swelling I may have fractured the bone. We’ll see tomorrow I guess.

It’s a good thing I finished with Guitar Hero III on Medium yesterday because it’s going to be quite some time before I can play again I would imagine. :(

On an unrelated note, the Indianapolis Colts are beating up on the Ravens pretty bad at this point. Peyton Manning has already been pulled from the game, with 13 completions for 17 attempts, for 249 yards and 4 touchdowns. According to my QB rating calculator he only needed one more completion (even for no yardage!) to get a perfect QB rating of 158.3. His final rating was 157.5.

Posted by mpyne under Personal | 6 Comments »

kio_perldoc

December 1st 2007

kio_perldoc: I’ll keep it short:

  • Ported to KDE 4.
  • The GENERATOR metainfo in the output has kio_perldoc now, so that proper blame may be placed.
  • The S<> tag in Pod now produces HTML which isn’t super broken. (Look for Mac OS in perlport)
  • Don’t try to load IMG tags. I wasn’t going to add this in except that it causes Konq 4 to crash for some reason.
  • Fix formatting of bulleted lists. Patch graciously provided by Bruce Ravel.
  • All C library functions are called like ::foo() now to avoid ambiguity. (e.g. with close())
  • Corrected a call to execlp(). If you ran kdeinit in a terminal you could actually see the man page come up…
  • Fix linkage for hyperlinks that refer to the same page.
  • The HTML output looks more like www.kde.org now.

Still needs CMake, Perl 5.8, etc. The KDE 3 version is 0.8.1, and KDE 4 version is 0.9, but it’s the same feature set.

Posted by mpyne under KDE & Programming & Useful Tricks | 1 Comment »