My son beat his first Switch game

Today we experienced a somewhat significant event: my son beat his very first Nintendo Switch game.  It was Splatoon 3, which he got for Christmas.  He's been playing it since then and just this morning he finally beat the final boss for the first time.

I've never played the game, so I have no idea how difficult it actually is.  However, several times I've seen my son get frustrated and upset because he was having trouble with it.  So it's a life-lesson - a small one, but a lesson nonetheless.  He struggled, he stuck with it, and eventually persevered.  Games can be very useful for that sort of thing.

My son was very happy to finally beat the game.  He called me in to watch the end and called his grandmother afterward to tell her about it.  It was really nice to see him to excited and to be there with him to share this small triumph.  Call it one of the joys of parenthood.

Getting back to games

It's been a while since I played many video games.  Not counting "casual games" on my phone, of course.  I'm talking about games that take more than ten minutes and that you can't necessarily put down at the drop of a hat.  But I've been getting back into PC games a bit in the last few months.

As I mentioned back in July, I've been playing some Halo.  Specifically, I played my way through the Master Chief Collection (MCC) on Steam.  For many people, playing the MCC is an exercise in nostalgia.  But I had never actually played any of the Halo games before (despite the first one coming out like 20 years ago), so this was all completely new to me.  And for the most part, I found them quite enjoyable.  (Now if only they'd port Halo 5 to PC, I'd be all set - I'll be damned if I'm going to buy an Xbox for one game.)

I actually picked that up from taking my son to the Strong Museum of Play.  You see, a while back they brought in a Halo: Fireteam Raven machine.  We tried it out and my son was immediately hooked.  He started wanting to play that every time we visited (which was pretty frequently, since we have a membership) and started to pretend to be using the weapons and fighting the aliens when he was playing around the house.  

IMG_20210822_112524-med.jpg

The game itself is nothing super special.  It's an on-rails shooter with cooperative multiplayer.  You get different weapons at pre-determined points in the gameplay and fight different enemies in different stages, but that's really the only variation there is.  However, unlike many arcade games, it does have an actual plot, with cut-scenes at the beginning and end of each level.  It's not a super-deep plot, but it's something, and it does tie into the larger Halo universe.  (Synopsis: It's set at the same time as the events of Halo: Combat Evolved.  You're a member of an ODST fireteam on the Pillar of Autumn and you have to fight off the Covenant and the Flood until the Master Chief can destroy the ring.)  So I ended up getting interested and playing the PC games.

As I said, I decided to install The Master Chief Collection via Steam.  I'd had a Steam account for many years, but never really used it much.  At one point I downloaded Railroad Tycoon from Steam (because I'd enjoyed playing Loki's Linux port of it years ago) and it didn't really work properly, so I wrote it off.  But it's very popular these days, and I already had a lot of unused Steam codes from Humble Bundle games, so I figured I'd give it a shot.  And you know what?  The Steam client is still buggy.  But it's usable and it's pretty good when it works correctly.  So I've been redeeming some of my codes and playing a few of those games via Steam.

My latest favorite is Stardew Valley.  I got a copy of it as part of a Humble Bundle at some point - I honestly don't even remember when.  I've seen plenty of ads for it, especially the mobile version, but never really gave it much attention.  I don't know what made me decide to try it, but since I already had a copy, I figured I'd give it a look.  Turns out it's actually surprisingly enjoyable.  It's a retro-style life simulation, where you play a farmer who moves to a valley with a small village and become part of the community.  There's no real plot that I can discern yet, or any real win or loss conditions.  You just build your farm and form relationships with the townspeople.  Yet it's oddly relaxing and just feels good to play.  It's also on lots of different platforms and it's pretty cheap, so if you're looking to unwind, it might be worth checking out.

Holiday mission

Last year, I gave my son an assignment for Christmas: help me assemble the RetroPie we got him.  He enjoyed that process and subsequently became a fan of Contra.  This year, we were a little at a loss as to what to get, and eventually decided on making the big family gift a Nintendo Switch.  Still video game themed, but not really amenable to being a DIY project.

But then, a few days before Christmas, we were talking about the vacation we took in Florida at the beginning of 2020, right before everything got locked down.  My son mentioned how much he enjoyed our trip to the science museum, which had a special exhibit on spies.  So I decided to make this year's "Christmas mission" a spy-themed scavenger hunt.  

I figured it would be nice to make it semi-educational, so I wrote a simple "encryption" program (just ROT13 in Python), commented it heavily, and e-mailed it to him.  Then I came up with four clues to lead him to, first, his stocking, and second, the Switch.  I wrote a short letter describing his mission and including the encrypted text for the first clue.  Then I encrypted the other three clues, printed them out, and hid them in the appropriate places.  I put the letter in an envelope and hid it semi-conspicuously in the Christmas tree.

Here's the program I sent him, in case anyone is interested:

# This program does a ROT13 encoding on a message to encrypt or decrypt it.
# ROT13 is a simple "substitution cipher", also called a "Caesar cipher" after
# Julius Caesar, who was one of the first people to use it.

# A substitution cipher means that you replace one character in the message with
# a different character according to certain rules.  ROT13 stands for "rotate by 13",
# because the rule is that you replace with the character that's 13 places farther in 
# the alphabet (when you get to "Z", you loop back around to "A" and keep going).

# One of the cool things about this is that, because there are 26 letters in the 
# alphabet, ROT13 can both encrypt and decrypt a message using the same method.
# You don't need to do anything different!

# Here's how the program works:

# We'll put the decryption in a function and pass it the message
def decrypt_message(message):

    # This is where we're going to store the decrypted message
    decrypted_message = ''

    # We decrypt by going through the message one character at a time.
    for character in message:
        # If the character is an upper-case or lower-case letter, let's rotate it.
        if character.islower() or character.isupper():
            # First we figure out the letter's position in the alphabet.  We can do
            # this by using it's ASCII code, which is the way we represent letters and
            # other printable characters in binary, see https://www.asciitable.com
            starting_ascii_code = ord('A') if character.isupper() else ord('a')
            # To get the position, we get the ASCII value of the letter and then subtract
            # the ASCII value for "A".  (Lower-case and upper case have different codes.)
            position_in_alphabet = ord(character) - starting_ascii_code
            # Then we add 13 and take the modulus with 26.  The "modulus" is the remainder
            # when you do division, so 30 / 26 is 1 with a remainder of 4, so the 30 % 26 is 4.
            new_position = (position_in_alphabet + 13) % 26
            # Now we add back the value we subtracted to get the position to make it
            # an ASCII code again.
            new_character = chr(new_position + starting_ascii_code)
            # Now we can add the the new letter to the decrypted message.
            decrypted_message += new_character
        else:
            # If the character isn't a letter (e.g. a space or punctuation), we'll
            # just leave it alone and add it to the decrypted message.
            decrypted_message += character

    # Now we can print out the result!
    print("The decrypted message is:")
    print(decrypted_message)
    print()


print('Ready to decrypt!  Type "exit" to quit.')
message = ''
while message != 'exit':
    print("Enter the message:")
    message = input()
    decrypt_message(message)

Zane actually found the letter on his own before I even had a chance to nudge him toward it.  He was really excited and immediately wanted to get started.  So we went and downloaded the ROT13 program and I showed him how to open it in IDLE.  He read some of the comments and then we ran it and he typed in the first message.  That led him to the second one hidden in the advent calendar, which in turn led him to his stocking in the basement.  Since we weren't doing presents until the extended family came over for lunch, the third message in his stocking told him to talk to his aunt, who I enlisted to deliver the last clue, which led to the Switch strategically hidden under the bed.

Apparently it was a good idea, because Zane was really into it and had a great time.  After finding the Switch, he even held a "debriefing" where he explained the entire mission in detail to his grandparents.  I count this as a very successful Christmas.

Maniac Mansion on NES

Unlike most episodes of "From the Archives", this one is just going to be current-day commentary. This was supposed to be a "linkblogging" post from way back on February 22, 2006. (That was probably not long after I added draft support to LnBlog!) However, it only had three links and I no longer care about two of them.

The one that is still good is Douglas Crockford's account of The Expurgation of Maniac Mansion for the Nintendo Entertainment System. (The URL has changed since 2006, but but luckily Doug was considerate enough to keep a redirect. However, this publication date is a little misleading.) It's about the back-and-forth they had with Nintendo when trying to port Maniac Mansion to the NES.

I remember playing Maniac Mansion on the NES. I rented it from Video Entertainment, the video rental store in the next town over, several times. I never finished the game, but I remember liking it. I never played the PC version, but even the NES version was more than a little weird.

This article is Crockford's account of some of the odd things that Nintendo insisted they remove from the NES version. They range from silly to head-scratching. But if you've ever heard anything about Nintendo's approval process for NES games, you know that they were very strict about maintaining a certain image and so were very particular about what kind of content they'd allow. Either way, it's an entertaining read.

A very retro Christmas

I'm certainly not a "hardcore" gamer by any stretch of the imagination.  However, like many kids who grew up in the 80s and 90s, I have fond memories of playing Nintendo.  So I still have a soft spot for retro games, which I occasionally play via emulation.  Turns out there's a large community of retro games on YouTube, so I sometimes watch their videos.  I particularly like channels like The Gaming Historian, that trace the history and context of games, franchises, or pieces of hardware.

I've also recently taken to watching the odd retro gaming video on YouTube.  In particular, I'm kind of fascinated by speed-running.  Several months ago I stumbled upon this video of a Dragon Warrior speed run in less than half an hour.  I loved Dragon Warrior as a kid, and I remember spending hours and hours grinding so that I'd be at a high enough level to move on to the next area.  But this run used random number generator (RNG) manipulation to control the "random" actions of the game and basically beat it over lunch.  I find the amount of work and investigation that goes into this type of thing truly impressive.  (Though I can no longer remember what it's like to have the free time that you'd need to do this.)

Anyway, while I'm watching these videos on my tablet or phone, my son will sometimes sidle up and watch them over my shoulder.  So he knows about and is interested in various old-school games.  He even sometimes watches me plays them or takes a turn playing them on my phone.  He's also been getting more interested in games, coding, and computers in general lately.

So this year, we got him a DIY project for Christmas - a retro gaming console.  Or, more specifically, the components to build a retro gaming console.  This consisted of a Raspberry Pi 400 CanaKit and a couple of IR wireless controllers.  I walked him through assembling the hardware, showing him what the components were and what they're for, and took care of flashing the microSD card with a RetroPie image and getting some games onto it.

Overall, this was actually a remarkably easy process.  The CanaKit comes with all the hardware you need, except for controllers, and it's pretty easy to up together.  I don't think I even needed any tools.  The controllers I got were advertised as working with Raspberry Pi and "just worked".  Even installing RetroPie was pretty painless.  The process was fairly well documented and required minimal configuration.

So now we have a nice little retro gaming console.  RetroPie works well and has a fairly easy to use interface (it even has some instructions for controlling it with the gamepad on-screen).  My son hasn't had much problem with it so far.  In fact, we beat Contra together this afternoon.  We used the Konami code to get 30 lives, of course.  I can't imagine playing without it - I'd almost forgotten how brutally difficult early video games could be.

The Joy of Gaming With Your Child

For this Christmas post, I wanted to share an experience from a couple of weekends ago that I hope will be entertaining, especially for any parents out there.  Let me set the scene.

As you may know, I have a young child - a seven-year-old son.  Like many (if not most) little boys, he really likes video games.  We limit his screen time, usually to an hour a day, but we allow him to choose what he wants to do with it.  He can watch TV, or use his Kindle, or, on the weekends, play the Wii.  (Not WiiU or Switch - just a plain-old Wii that we've had forever and barely used before he was born.)

Important background information: While my son is generally a very happy child, he's growing and losing teeth at the moment, so he's a little...difficult on some days.

So on this particular Saturday, around 3:30 in the afternoon, my son announces that he hasn't had his electronics yet today and would like me to play Wii with him.  OK, that's fine. Usually he wants to play Mario Kart or Super Smash Brothers, but the previous week he discovered Super Mario Wii, so that's what he wants to play.

Super Mario Wii box art Super Mario Wii box, courtesy of WikiMedia

This is bad news.  Why?  Because inexperienced seven-year-olds and platformers don't mix well.  His hand-eye coordination is still developing and he doesn't really "get" the puzzle aspect of platforming.  So, needless to say, he doesn't do very well.

Now, in the good old days of the original Super Mario Brothers, this would not have been a problem.  He would die quickly and then I'd take my turn and we'd go back and forth.  But Super Mario Wii is a cooperative multi-player game, so you actually both play at the same time.  And not only is it cooperative, but the players can interact with each other, meaning that you can bounce off another player's head, or push them along the screen.

At this point you might see where I'm going.  I'm sure this can be a very fun way to play, but when you're playing with someone who can't really control their character and doesn't fully understand the objective of the game, this is a recipe for frustration.  I end up playing the same levels over and over because my adorable and wonderful child whom I love very much keeps getting in my way and getting us both killed.

Fortunately, on this particular day I had the foresight to grab that bottle of Jack's Abbey bourbon-barrel aged lager wine that's been in the refrigerator for the two months (as I mentioned in my fitness post, I don't drink much these days) before I sat down to play.  That helped me get through the gaming session and see the humor in the situation.  But on those days when things aren't going well or I didn't get much sleep, these sessions can be very trying.

But at least he's having fun and hopefully building some good memories.  And he is improving, slow but sure.  So I'm glad we can do this together, even if it's not always easy.  Thus is parenthood.

Early birthday

I got an early birthday present today. My birthday isn't until Monday, but my sister-in-law was over tonight, so she gave me my present.

Remember how I mentioned last week that I have a bit of a weakness for "vintage" games? Well, she got me a Logitech Extreme 3D Pro joystick. You rock, Theresa!

And what did I want such a joystick for? You guessed it - to play Wing Commander! I absolutely love the Wing Commander series, and have since I was in high school. I think I owned most, if not all, of the games. In fact, I think I still have copies of all of them, though the ones that were on floppies have long since died (I still have the files on my hard drive, though). I enjoyed pretty much every game in the series, though the original and the Privateer spin-off were probably my favorites.

So here I am, with a brand-new 12-button joystick, playing a 20-year-old video game in a little emulated DOS window. It's amazing the entertainment/time-wasting possibilities technology opens to us!

Making my games work

Despite not considering myself a "gamer" (with the exception of Battle for Wesnoth), I do have a bit of a weakness for "vintage" games, by which I mean the ones I played when I was in high-school and college. While I don't have much time for games anymore, what with full-time employment and home ownership, I still like to come back to those old every now and then.

Well, when I tried to fire up my PlayStation emulator, ePSXe, to mess around with my old copy of Final Fantasy Tactics, I ran into a problem - I no longer have GTK+ 1.2 installed! Apparently it was removed when I upgraded to Ubuntu 10.04 (or possibly even 9.10, I'm not sure). However, according to this LaunchPad bug, this particular issue is by design and will not be fixed. That kind of stinks, because I have several old closed-source Linux-based games that depend in some way on GTK+ 1.2 (often for the Loki installer).

This sort of thing is a little bit of a sore spot for me, and has been for some time. On the one hand, I can understand te Ubuntu team's position: GTK+ 1.2 is really old and has not been supported for some time. You really shouldn't be using it anyway, so there's not much reason for them to expend any effort on it.

On the other hand, how much effort is it to maintain a package that's no longer being updated? Why not at least make it available for those who need it? This is the sort of user-hostile thinking that's always bothered me about the open-source community. There's hardly any compatibility between anything. Binary compatibility between library version is sketchy, as is package compatibility between distributions. Even source compatibility breaks every few years as build tools and libraries evolve. Ever try to compile a 10-year-old program with a non-trivial build process? Good luck.

And that seems to be the attitude - "Good luck! You're on your own." It's open-source, so you can always go out and fix it yourself, if you're a programmer, or hire someone to do it for you otherwise. And while it's absolutely great that you can do that, should that really be an excuse for not giving users what they want or need? Should the community have to do it themselves when it's something that would be relatively easy for the project maintainers to set up?

Not that I can blame them. As frustrating as decisions like this can be, you can't look a gift horse in the mouth. The Ubuntu team is providing a high-quality product at no cost and with no strings attached. They don't owe me a thing. Which, I suppose, is why it's so great that members of the community can fix things themselves. The circle is complete!

But anyhow, that's enough venting. That LaunchPad thread had several posts describing how to install GTK+ 1.2 on 10.04. I chose to use a PPA repository.

sudo apt-add-repository ppa:adamkoczur/gtk1.2
sudo apt-get update
sudo apt-get install gtk+1.2

Ta-da! I'm now back at the point I was at a year or so ago when all of my old games actually worked.

More game breakage - SimCity 3000

Remember my last post on binary compatibility under Linux? Well, I got hit again. For the first time in months, I tried to play my old copy of SimCity 3000 Unlimited - the old Linux port of it that Loki Games did way back. Didn't work in Kubuntu Gutsy.

Fortunately, I was able to find this blog entry on fixing SC3U. The fix requires setting some environment variables and using some libraries from Ubuntu Dapper.

The simple, three-step process goes like this:

  1. download the Dapper libraries and extract them someplace on your machine, e.g. to /usr/local/games.
  2. Adjust your shortcuts, launcher scripts, or whatever you use to start SC3U to use the following command line (lines broken for readability):
    LD_LIBRARY_PATH=/path/to/loki_compat \ LD_ASSUME_KERNEL=2.4.28 \ /path/to/loki_compat/ld-linux.so.2 \ /usr/local/games/SC3U/sc3u -w
  3. Run your script/shortcut/whatever and hope that SimCity starts.

I guess soon it's going to get to the point where I'll need some alternative method to run these games, e.g. VMware. Loki Games did go out of business 6 years ago and these games have been unsupported ever since, so it's only a matter of time until I can't make them work anymore. And that's sad. I shouldn't have to consider using virtualization to make the native Linux port of a program run on Linux.

I wonder if the Windows versions of the Loki games still run on Vista?

Random binary breakage and a rant on compatibility

I enjoy an occasional video game. However, I am by no means a "gamer", as evidenced by the fact that I don't have a copy of a single proprietary game published later than 2002. Rather, I enjoy open-source games like Battle For Wesnoth, vintage games such as Bandit Kings of Ancient China and Wing Commander, and the occasional old strategy game, such as my old Loki games for Linux. I also have a soft spot for emulated console games for the NES and Super NES. I even break out an emulator for my old PlayStation disks every now and then.

Well, the other day the mood struck me to play one of my old PSX games, so I clicked the icon for the ePSXe PlayStation emulator in my application menu and waited...and waited...and waited. And it never came up. So I tried running it from a command prompt and...nothing happened. And when I say "nothing", I mean nothing - no error message or output of any kind. I just got my command prompt back immediately.

Mind you it had been a while since I'd used ePSXe, but there was no immediately obvious reason why it should fail. It's installed in my home directory and has been sitting there, fully configured, for over a year. I used it regularly for a few weeks back in September and October and it worked perfect. Absolutely nothing has changed with it.

Fortunately, a little Googling turned up this thread in the Ubuntu forums. Apparently the ePSXe binary is compressed with UPX. After installing the upx-ucl-beta package via apt-get and running upx -d /path/to/epsxe to decompress the binary, it worked as expected. Apparently something about running UPX-compressed binaries changed between Ubuntu Feisty and Gutsy. I have no idea what, though.

This actually leads into one of the things that really annoys me about Linus: binary compatibility. It's also one of the reasons I prefer to stick with open-source software on Linux when at all possible.

In the Windows world, binary compatibility between releases is pretty good. Granted there are always some applications that break, but given the sheer volume of code out there, Microsoft does a good job keeping that number relatively small. In fact, if you've ever heard any of Raymond Chen's stories of application breakage between releases, you know that the Windows app compatibility team sometimes goes to truly heroic lengths to enable badly broken applications, many of which never should have worked in the first place, to keep functioning when a bug they depended on is fixed. The sample chapter (PDF) from Raymond's book has some really great examples of this.

In the Linux world, on the other hand, nobody seems to give a damn about maintaining compatibility. If you have a binary that's a few years old, it may or may not work on a current system. And if it doesn't, sometimes you can massage it into working, as was the case with ePSXe this time, and sometimes you can't. Not that this should be surprising: some developers in the Linux world are so lazy they won't even allow you to change the paths to application support files - they just hard-code them into the binary at compile-time with preprocessor defines! If they don't care if you can install the same binary in /usr or $HOME, why should they care if it works between distributions or even releases of the same distro? The attitude seems to be, "Well, it's open-source anyway, so who cares how compatible the binaries are?"

But if we're going to be honest, even being open-source only goes so far. Actively-maintained apps are usually OK, but have you ever tried to build an application that hasn't been maintained in 7 or 8 years from source? It's pretty hit and miss. Sure, if I really needed the app, had lots of spare time on my hands, and was familiar with the programming language and libraries it used, I could always fix it to build in an up-to-date environment. But for a regular user, that's simply not an option. (And even for a programmer it may well be more trouble than it's worth.)

But as annoying as I find the general lack of compatibility, as much as I wish I could just run a damn executable without having to cross my fingers, I can understand why things are they way they are. Quite simply, maintaining compatibility is hard. It takes care and diligence and it can make it hard to fix certain problems or make certain types of improvements. And really, when you're not getting paid for your work and have no real obligation to your users, you have to ask yourself if it's worth the effort. Heck, even many commercial vendors aren't that serious about backward-compatibility. Is it really reasonable to expect a loose association of unpaid volunteers to be any better?

But that's enough ranting for tonight. There are ups and downs to every software system. I'm just disgruntled that everything in my personal Linux-land seems to be 5 times more difficult than it needs to be lately.

Gamercise-induced writer's block

I have gamercise-induced writer's block. That's my term for being unable to think of anything good to blog about because I'm tired from playing high-impact video games.

Aside: Boy, "high-impact video game" is kind of a tortured phrase, isn't it? It sounds like the force-feedback controller is going to leave bruises and knock things off your shelves. Actually, it remindes me of one gamer I heard refer to "high-stakes games." Doesn't that give you images of the computer electrocuting you if you lose?

The reason I'm tired is because Sarah ordered herself a copy of Dance Dance Revolution for the PlayStation 2 the other week. I didn't have any interest in it, but she wanted something fun to do for exercise. It also had the side benefits of being relatively cheap and actually putting my PS2 to use.

However, when I watched Sarah actually playing, it looked like a lot of fun. I always thought it looked kind of silly, but when I tried it, it really was a lot of fun. And I can't even dance! In fact, not only am I not very good, Sarah tells me I look like a spastic chimpanzee while I'm playing. But I don't case, because it's still a lot of fun.

I'm kind of enjoying this whole physical video game thing. It's a lot of fun and it actually does get your pulse up. In fact, it would be nice to get the PS2 in a room other than our bedroom. That way, I could play Dance Dance Revolution for my morning exercise rather than just doing half an hour on the eliptical machine. I wouldn't be able to read at the same time, but it sure would be more exciting.

And while I'm at it, maybe I should get a Wii. Those look like they'd be great fun too....

Wesnoth improvements

After upgrading to Kubuntu Edgy, I see that I've got a new version of Battle for Wesnoth. The upgrade installed version 1.1.8, which is a significant improvement over the 1.0.x version I was running before. I have to say, Wesnoth has really gotten good since i got hooked on it three years ago.

The graphic improvements are nice, but those aren't really the best changes. What really helps it is the improved music, sound, and dialog. I'm in the middle of the Heir to the Throne campaign right now, and it feels a lot more polished than the last time I played it. In fact, the sound and music are now good enough that it feels like you're actually losing something when you turn them off!

I was particularly pleased the dialog is getting better. Portions of it were really kind of corny and stilted. They've also fleshed out the characters a bit, giving them more than one dimension. For example, Li'sar now actually has some motivation for betraying her mother, rather than just turning on a dime when the good-guys fill her in. They've also started giving Konrad a little sense of reality, as opposed to just making him a caricature of the innocent young hero. It's really quite refreshing.

People may complain about the open-source community being unable to produce decent games, but you konw what? I'll take Battle for Wesnoth over some crappy 3-D "kill everything in site" game any day. Snazzy visuals is not synonymous with quality, regardless of what the people at nVidia and ATI might like you to think.

Breaking out DOSbox

I've been indulging my fetish for "vintage" (i.e. really old) games again. This time it's with my 10 year old copy of Wing Commander: Privateer.

I really loved the Wing Commander series, and Privateer was always one of my favorites. It's a very free-form game, but it still has a story line. The flexibility it affords you is really enjoyable. You can be an honest trader, a mercenary, or even a pirate if you want to! Plus you get to customize your ship, which is always fun.

After digging out my Privateer CD, which also includes the Righteous Fire mission set and a copy of Strike Commander (another Origin title in the same vein as Wing Commander but set much closer to the current day), getting it installed and working was a pretty easy matter. The only special thing I had to do was turn off EMS support in my dosbox.conf file and bump up the CPU cycle and frameskip settings. The emultation is bsaically perfect!

Of course, I've long since thrown out the Privateer documentation, so my first problem was remembering how to play the game. Forunately, I found a handy page that included a PDF version of the manual along with various other helpful information.

The only thing I really dislike is the controls. See, I don't own a joystick anymore, and apparently DOSbox doesn't really support them that well anyway. If you've ever tried to play a Wing Commander game without a joystick, you will recognize this as a problem. Oh, sure, I can use my gamepad or the keyboard. Without a joystick, your movements are jerky and it's hard to keep an enemy ship in your sites. Maybe I'll have to see if I can get a cheap joystick in the local EB Games. Come to think of it, do they even have cheap joysticks anymore? I can't remember the last time I saw one.

Playing Wesnoth

I've been playing some Battle for Wesnoth the past couple of weeks. Today, I finally finished the "Heir to the Throne" campaign. It was on easy, but I finished it. This isn't the first time I've gotten to the end of Wesnoth, but it is the first time I've seen the ending. I first picked up on Battle for Wesnoth a couple of years ago, when version 0.4.0 was out. I played it on and off for a while and got to the end of the playable levels on several version. However, by the time I lost interest, they still hadn't written all the levels for the standard campaign.

I must say that Wesnoth has come a long way since I started playing it. The graphics are better and the game play has evened out, but it still retains that wonderful simplicity of game play that I so love in strategy games. It's the same reason I still enjoy playing my old copy of Bandit Kings of Ancient China under Dosbox. They both allow for a rich, enjoyable game without making you think too much about the minutia of running an army. I guess it's just a matter of finding the right level of abstraction for the game.

I did have one small problem with Wesnoth today. Apparently a key got stuck on my keyboard, or something, because I ran out of disk space while I was playing. What does that have to do with the keyboard, you ask? Well, after deleting some unused files so I had some space to work with, I started looking for the source of the problem. I thought I had several gigabytes left and I hadn't done anything big recently, so I was a bit confused. It turned out that my home directory, which normally runs a couple of gigs (what can I say - I'm a pack rat), had swollen to 9GB! A closer examination revealed that my ~/.wesnoth directory was up to 6GB. This is where the stuck key comes in, because that's the only explanation I could think of for why there would be 3800 images, at about 1.7MB a piece and all created today, in the Wesnoth screenshots directory. Weird....

At least SimCity 3000 still works

In a fit of optimism, I did a little more playing with Tuxracer tonight. It still doesn't work. On the up side, I was at least able to get all three of my Loki games to work.

I have copies of Loki's ports of Quake III Arena, Railroad Tycoon II, and SimCity 3000 Unlimited. Both Railroad Tycoon and Quake 3 still work perfectly on Kubuntu Breezy. However, SimCity needed a little research.

The straight-off-the-CD installation of SimCity didn't work at all. It bombed out every time with a message about an invalid glibc version. Fortunately, there is a version 2.0a patch for SimCity, which I still have a copy of. Applying the patch didn't work right away either - I got a message about invalid usage of trap. However, when I ran the patch with bash filename instead of sh filename, it worked. Probably a bug caused by bash using sh compatibility when invoked with the sh symlink.

Anyway, after installing the patch, it still didn't work - I just got a segfault. However, I found the answer in this post on Ubuntuforums.org. It turned out to be as simple as telling SimCity to assume a different version of the kernel. I just started it with the command following command, and it worked perfectly:
LD_ASSUME_KERNEL=2.4.2 /usr/local/games/SC3U/sc3u

So that's three out of four proprietary games still working. If I ever get a better video card, maybe I can make it four out of four. Of course, if the games were open-source, I could try to fix them myself, but I guess you can't have everything.

I love emulation

Emulation is great. No need to dual-boot or go out and find a replacement for hardware that broke down years ago. Just fire up an emulator and you've got a whole different platform running in a convenient little window on your desktop.

Although video game emulators like ZSNES and MAME are nice, my current favorites are DOSBox and QEMU. DOSBox is a DOS emulator, kind of like DOSEMU, but more focused on games. I currently use it for exactly one thing - playing Bandit Kings of Ancient China, one of Koei's classic strategy games. This was literally the first PC game I ever bought. I got it and a copy of Tetris from a game store back around 1991 or 1992. I've since lost the copy of Tetris (which was the only program I ever bought that came with a 5.25" floppy disk), but I jealously guarded the Bandit Kings disks for years. They finally went bad a few years ago, but fortunately I had a backup of the game files, so I can still play my original copy. In fact, I even still have the instruction manual and poster that came with it. For some reason, I just never get tired of that game.

QEMU is cool for an entirely different reason. It's an open-source "process emulator" that supports full system emulation. In other words, you can use it kind of like VMWare, meaning you can install an old copy of Windows onto a file on your hard drive. This is a very handy thing to be able to do. For one thing, it allows you to use all that old Windows-only software you probably have lying around. It's also very nice for testing purposes if you're a web developer, since you will almost definitely want to test your pages in Internet Explorer. And after all, Wine is a big pain in the neck to install and configure, while installing a virtual copy of Windows is pretty simple. Also, you can have multiple QEMU disk images with different versions of Windows and Internet Explorer. I don't think you can do that with Wine.

The only problem with these programs is that they require more CPU power than I really have. My trusty 500MHz AMD K6 has served me well, but it can't really handle heavy emulation. However, QEMU does have an "accelerator" kernel module which is supposed to speed things up considerably. Unfortunately, the accelerator module is not free software and is only available in binary form. Plus it only works with the current CVS, not the any of the stable releases. Oh well. I'm compiling the CVS source now, so we'll see how it works. Hopefully I won't need it once I finally get around to upgrading my system.