Articles under Randomness Older >>

Hello Adventure!

Wow, what a pathetically long stretch of time not to post a single thing! Of course, once you have the "not posting" momentum, it's easy to keep on going. So what on earth would make me revive this blog-like news thingy? I mean, it would have to be something so exciting, so astounding, that I'd choose to break my silence and shout it to the world.

What could it be?

Well, as you all know by now, I did a few year stint at LucasArts Entertainment Company, initially working on the Macintosh ports of such illustrious titles as Dark Forces and Full Throttle. But my true love was the LEC adventure games, and so while I was there, I also dove in and ported Day of the Tentacle and Sam & Max Hit the Road to the Mac — even though nobody had asked me to.

Flash forward a few years. I had left LucasArts behind for working at Connectix (who were eventually purchased by Microsoft). I happened to run into some of my former LEC colleages and told them, it would be great if we could port all the SCUMM games to modern Windows, just let me know and I'd be happy to make it happen. Nothing came of it initially, but we eventually managed to work something out, and I was given the go-ahead to put together modern Windows-compatible versions of both Full Throttle and Sam & Max.

But why stop there? Being a bit of a completist, you can imagine that I was compelled to get more than just those two games up and running. But LEC decided to focus on the two original games they requested, and they were eventually released in a limited fashion, which was in the end a pretty big disappointment for me, as I had envisioned something much more mainstream. And maybe even involving some of those other games I had ported — even though nobody had asked me to.

Of course, I fully understood the logic behind not releasing the remaining ports I did. After all, for LEC to release them would mean running all the games through QA again, solving bugs, and committing to fixing customers' problems. I periodically pinged my contacts, hinting that they should consider alternate, "unofficial" ways to release the games, but I never really got the sense that anything would ever happen with my ports.

Until a couple of days ago.

That's when LucasArts announced — to everyone's general astonishment — that they were going to release 10 of their classic games on Steam, including 4 SCUMM games (Loom, The Dig, Indiana Jones and the Last Crusade, and Indiana Jones and the Fate of Atlantis). Of course, I was immediately curious to know if this meant they had revived my now years-old work to port the games, and it turns out that yes, some of my work is finally seeing the light of day! (After some additional improvements and bug fixes by the team at LEC, naturally. Thanks for cleaning up the details, guys!)

I honestly thought this day would never come. And now that it has, well, that's a great excuse to break the radio silence. I only hope that these re-releases are successful enough to warrant a second round. Because, while I can't reveal the titles of the other games I ported, I am somewhat of a completist.... :)

An Ode to CodeWarrior

As a Mac programmer in the 1990's, you quickly learned to swear by Metrowerks CodeWarrior as your development environment. It was awesome for its time: a completely integrated system with ripping fast compilers, a built-in debugger, and a very nice editor.

Eventually, the company decided to branch out of Mac tools (Apple never seemed to be all that thrilled to have a competitor that, frankly, wiped the floor with them), and they moved into other areas: Java tools and embedded compilers. They also ported their environment to Windows, which was nice for those of us Mac programmers who were just starting to get our feet wet in the Windows world.

In the end, however, the market for a real 3rd party compiler withered and died on the Mac front, and never really took hold on the Windows front. Metrowerks was purchased by Motorola, they focused on their Windows-hosted embedded toolset, and eventually disappeared. The last version of CodeWarrior I bought was CodeWarrior 8 for Windows, released back in 1992.

But in my world, CodeWarrior lives on!

Because once you spend a number of years with an editor that you really like and get to know, it is difficult to switch to another. Yes, sure, there are tons of full-featured editors out there, many of which can be custom-tweaked to perform a good chunk of what the CodeWarrior environment's editor did. But every time I have tried, I found myself crawling back to the old standby within a week or two, missing some feature I just couldn't live without.

That's not to say CodeWarrior is perfect; far from it. It has a nasty GDI leak during search & replace that causes it to eventually crash when it hits the Windows maximum per-process limit (fortunately you can increase that number in the registry!) And its interface on Windows is a bit goofy, with a centralized menubar like on the classic MacOS, and toolbars which I immediately turn off. Not to mention it got even a bit goofier on Vista, with the wide window borders.

But there are too many features I constantly rely on to give it up. Here's my top 10 list of favorite features:

  1. No MDI. Those of us who came from the Mac always thought that one of Windows' most horrible user interface gaffes was the introduction of a single parent window that contained all your document windows. What this does for coders is it makes you immediately maximize your parent window so you get the most real estate. Except you only maximize to a single monitor, so you are inherently limiting where you can put your windows. And you are wasting a ton of space. To appeal to those who were used to this abomination, Metrowerks defaulted to an MDI mode in their Windows port, but thankfully you could turn it off. The resulting interface was a bit odd, with a small parent window containing just a menubar, but at least you could see the files you were editing alongside other useful data in other applications' windows. Amazing!
  2. Infinitely divisible windows. Sometimes you need to look at two different parts of the same file at the same time. Sometimes you need to look at more than two parts of the same file at the same time. Sure, many editors allow you to split a document into two panels, but they almost all only allow you to split the document once, and then only vertically — what the hell? My nice widescreen monitor allows me plenty of room to see two or three views of the document side-by-side! With CodeWarrior you could split each window into as many views of the same document as you wanted, vertically or horizontally. I've yet to see a good answer to this.
  3. Ctrl+E enters the selected text into the search field of the search & replace dialog. Shift+Ctrl+E enters the selected text into the replace field. With these two key combinations, I rarely need to ever bring up a dialog to search & replace. I simply select the example I want to change, Ctrl+E, type over it with the new text, select that, Shift+Ctrl+E, and then use the many other additional shortcut keys to perform the replace over the rest of the document.
  4. Multi-file regular expression search & replace. I use this all the time. You can operate on all opened files, recursively over an entire folder tree, or only over selected files. Recently searched directory trees are available in a popup menu. Making global project-wide changes with this feature is a snap, and you can do it either all at once or one at a time using shortcuts.
  5. Awesome directory and file compare. Simply select two files or two directories and it will compare them and display them side-by-side with a very nice visualization of the differences and the ability to apply/unapply changes. Nicer diff/merge utilities have come about since this one, but this was one of the first truly excellent compares I ever experienced.
  6. Function popups. The editor would scan your C/C++ code, find the function names, and create a popup of available functions on the fly. No need to compile the file to generate browse information — it's built right into the editor and updated dynamically.
  7. Configurable length of recent documents list. Yep, a minor feature, but I set this to 40 and have a nice long list of recent documents I can skip back to very quickly.
  8. Page navigation without cursor movement. Off with the default Windows key mappings, this feature comes from the Mac, where the page up/down keys did not move the cursor, but instead simply scrolled. This was handy for keyboard navigation. You would use page up/down to scan for something you were looking for and the cursor would stay put. You could also his the Enter key on the keypad to quickly recenter the screen on the cursor.
  9. Open header file shortcut. This is the simplest feature yet extremely handy. If you are editing a .c or .cpp file, Ctrl+Backquote opens the .h file with the same name in the same directory if it exists. And if you are in the .h file, the same shortcut opens the corresponding .c or .cpp file.
  10. Quick file access. Select the name of a file in a text file, hit Ctrl+D, and the editor would search the current directory for a file with a name matching the selected text and open that file. Highly useful for #includes. If you have no text selected, you can still hit Ctrl+D and it will bring up a dialog asking you to type the name, which it then searches for in the same directory relative to the file you were editing. I use this all the time for navigating between files without leaving the editor or bringing up the open file dialog.

Suffice to say, I am many times slower without the help of all these features. Maybe someday I'll write my own editor and incorporate everything I want into it, but as long as CodeWarrior keeps on working, I'll probably just stick with what I love.

When Good Codenames Go Bad

I'll admit it: I've never been good at coming up with codenames for projects. Sure, I've worked on projects with good codenames (Virtual Game Station was codenamed Bonestorm, but you can thank Eric for that one). But they're usually not of my invention.

Except once.

When we were starting work on the first Windows version of Virtual PC, we were brainstorming codenames. Nothing was really clicking. Finally, someone suggested, "Well Aaron's the lead, he should pick the name." Great. Off the top of my head I scrambled and threw out Hedgehog. Not a particularly exciting or descriptive codename, but not an entirely terrible one, either. It stuck. In fact, we even used Hedgehog as the root directory name of our source control tree (this was before we really realized what a bad idea this is, since you're generally stuck with it at that point without some major reshuffling).

Over time, the name grew on me, and on the rest of the team. Turned out to be a pretty good codename after all. As we went through our planning phase for Virtual PC for Windows, we decided to rearchitect the core Virtual PC code so that we could share as much code as possible between the Mac and Windows versions. Furthermore, planning ahead, we realized that we were going to want to consider developing a version of Virtual PC to run on Linux platforms. And we were going to want to craft a new Mac version that ran on MacOS X, which hadn't been released yet.

All of these projects needed codenames. And so, with a bit of cleverness, Hedgehog begat Warthog (VPC for Linux) and Groundhog (VPC for MacOS X). Of course, we still needed to produce a "classic" MacOS 9 version as well. Since that one had been around since the beginning, it was dubbed Boss Hogg.

Conveniently, referring to the whole collection, we could just talk about the whole hog.

After we had produced Virtual PC for Windows, we hooked up with Microsoft to produce a variant of Virtual PC for Windows that would serve as the emulation platform for Windows CE development. This was sort of a stripped-down, mini version of VPC Windows. It was given the codename Piglet.

By now, we had pretty much achieved a state of doneness with the whole hog theme. Or so I thought.

We had one developer, working from overseas, who was off trying to come up with what we all thought was going to be the killer application of Virtual PC: seamless integration with the hosting OS. That is, you would be running Virtual PC for the Mac, and rather than seeing a Windows desktop, you would just see the individual windows of the Windows applications you were running. You could interact with them similar to your Mac application windows, and thus your Windows apps would appear to freely intermix with your Mac apps. This was a hard problem, and we never did come up with a final shipping solution. But we did have a codename for it: Seamless Windows Integration in the Native Environment. Yep, SWINE.

Okay, at this point, all the developers were really done. A moratorium was placed on pork-related codenames. We would come up with a new theme. We began to start talking about what our future products might be. We began development on Virtual Server, and studiously avoided using codenames at all.

Sadly, our project managers did not get the memo. Looking forward, we thought about supporting multiple processors in a virtual PC, and maybe even developing an Itanium-based version. The codenames for these two projects?

Snowball and Napoleon.

Strangely, nobody has ever asked me to come up with a codename since then. I wonder why?

Spoooon!

At long last, it looks like the original animated version of The Tick is going to be released on DVD, hopefully sometime this year. Now I can finally ditch the crappy VHS transfers I've been hanging onto all these years!

Why do the good shows have to die so soon?

Found this amusing article about the Fox network and their ability to take really good, innovative shows and make sure that nobody sees them by constantly pre-empting them and hardly giving the shows a chance to succeed. I don't watch a lot of TV, but what I do often find myself watching turns out to be quite a few of the shows mentioned in the article: "Futurama" (one of my favorites, I liked it better than "The Simpsons", actually), "Family Guy", "Millennium", "Harsh Realm", and especially "Firefly" were all victims of Fox's programming staff as much as they were victims of poor ratings.

It seems that these days if a show isn't an instant hit, it is canned within the first few episodes. Whatever happened to letting a show build an audience? You'd think Fox would have learned their lesson thanks to the unexpectedly large DVD sales of "Futurama", "Family Guy" and "Firefly". But apparently not. I never watched "Wonderfalls", but I suspect it would be a good show to check out. I mean, given that it was cancelled after its fourth episode by the same network that cancelled so many other shows I liked....