Projects

A man’s soul.

DropMPQ 0.7

DropMPQ 0.7.1 has been released. It adds support for dropping folders on DropMPQ’s icon in Finder or the Dock.

This is a relatively small but critical update for DropMPQ. The highlights are:

  • Fixed a bug in MPQKit that caused invalid MPQ archives to be created on Intel Macs.
  • Added support for the bzip2 compressor and updated the compression settings for zlib and ADPCM.
  • Added Sparkle for easy updating.

I was also made aware that the previous archive didn’t execute on Leopard (and in fact might have simply been corrupted), so this update also resolves that particular (and somewhat embarrassing) issue.

It should be noted that if you’ve used DropMPQ previously, the import preferences will most likely be reset because the internal format has changed significantly. Speaking of which, I’ve added additional default import settings for some new file types, including ogg, mp4, mov and smk.

Download DropMPQ 0.7.1.

MPQDraft 1.0

MPQDraft 1.0 is now available, after a ridiculous 6 years of development. This is my second oldest project, second only to MPQKit (and its predecessor, MPQ2K Mac Edition). The highlights are as follows:

  • Support for patching PowerPC CFM programs on both PowerPC and Intel Macs. Mach-O and Intel support are forthcoming.
  • MPQ Loader 0.5 only supports Starcraft. Warcraft III support will be added only if there is demand.

The download is available from the sidebar and on the MPQDraft project page.

MPQDraft has an interesting history which I will be revisiting in an upcoming post. This will bring us all the way back to the days of Classic Mac OS.

In addition, I am planning on releasing in partnership with Campaign Creations updated versions for their classic campaigns using this new version of MPQDraft. Hopefully, people will check out the richness of the Starcraft modding community before stepping into the next chapter that Starcraft 2 will begin.

This is probably coming out of the blue, but the renewed interest in StarCraft spurred by the ongoing development of Starcraft 2 has prompted me to take a look at MPQDraft again. As the title indicates, I now have the technology working again on Intel and PowerPC Macs for CFM (that’s Code Fragment Manager, a relic from classic Mac OS) applications (the primary target of MPQDraft, StarCraft, is still a CFM application).

MPQDraft at work

I will be releasing the new version once a few more bugs are addressed and proper testing on Leopard is completed. Once that’s done, I will probably contact old friends at Campaign Creations to have updated versions of all their classic StarCraft campaigns posted.

Riven X engine variables

I introduced in Riven X 0.4 arbitrary engine variables. The intent is for them to control various behaviors of the engine as development continues. Engine variables are categorized according to the sub-system they affect, and can have any arbitrary numerical, alphanumeric or boolean values.

At this time, there’s only one category, “rendering”, which contains only one variable, “renderHotspots”. As the name suggests, this variable is interpreted as a boolean by the engine and controls whether or not hotspot rectangles are rendered over regular card content.

To change the value of an engine variable, you can use the new “set” debug shell command as such:

set <category>.<variable> <value>

For example,

set rendering.renderHotspots 0

Right now, there is no way to query for the value of a single variable, nor for a complete listing of valid engine variables. To remedy that, I am currently working on a variable editor interface which will not only allow easy viewing and editing of engine variables, but also of game variables (what determines and control the state of the game; that is which doors are open, etc.).

Riven X 0.4

Update: Riven X 0.5 is now available.

There it is at last, a new binary release of Riven X. This new version is of course far beyond the previous release. Some highlights:

  • Basic hotspots are working (mouse up and mouse down), which means you can walk around the islands, flip switches, push buttons, and so on.
  • Major improvements in movie and audio rendering. Ambient sounds now fade in and fade out correctly.
  • Game variables are implemented and have sane default values, which means simple puzzles should be working correctly.

Of course, there’s still a lot of work left to be done. CD media is still not supported, transitions are not rendered, there are a lot of stability and performance issues left to address, many opcodes and all external functions are missing, water animation is not implemented, saving and loading games are not implemented and full-screen is not available yet.

In addition, this new release comes with Sparkle, the popular technology for self-updating applications. All development builds are set to check a development appcast which gets automatically updated daily with a fresh build from Subversion. In short, Riven X will update itself to the latest revision automatically every day. I hope this will help get new versions into the hands of testers more rapidly.

I’ll be preparing a short series of posts about useful tricks for finding problems and using the debug console in the coming days. In the meantime, enjoy this new release.

Download Riven X 0.4 (4.60 MB). A permanent link is available in the blog’s sidebar.

MPQFS is implemented in Objective-C in order to interface with MPQKit. However, because the FUSE user-space library (provided by MacFuse) is a C library, I had to write a thin wrapping layer to convert the C callback functions required by FUSE to Objective-C method invocations. This layer is simplistic enough that I had to disable multi-threading support in MPQFS (I’m not too sure of MPQKit’s thread safety status either).

Well today, a new MacFUSE release introduced an Objective-C framework with well-defined classes and protocols ready to be sub-classed (and delegated) to implement filesystems entirely in Objective-C. I may or may not adopt this framework in MPQFS (don’t change code that works), but I will certainly take a look at its implementation to see if I can improve my implementation in any ways.

I also recommend anyone using MPQFS to grab the new MacFUSE version. It has a short, but always appreciated, list of bug fixes.

Quick note to those interested by MPQFS. I’ve made available version 0.3.3 (0.3.2 was released silently earlier today). The two updates fix a small number of annoying issues, such as read-only files and folders copied from an MPQFS filesystem, and include a work around for a bug in Core Foundation which would result in a crash.

If you’re visiting the blog site, you’ll also notice the sidebar now includes a Downloads category. I’ll be adding direct download links to the latest version of my programs there in the coming days. I’ll also see if I can add a link to the appcast feed.

Forthcoming updates

Now that Christmas celebrations are beyond us, it’s time for an update on my two flagship projects. My plan is to release a new binary version of Riven X, MPQKit and mpqfs within the first week of next year.

The Riven X update will include over a year of progress in the project, including functional hotspots, allowing for the first time to explore Riven without having to entirely rely on the debug console. Numerous bug fixes to graphics and audio rendering, better error reporting and many new Riven Script opcodes will also be part of this update. If time allows, I will also include support for the CD edition and card transitions.

The MPQKit update will focus on bug fixes and may be the 1.0 release of the framework. Once that is out the door, I will be planning a 1.1 release to add some less-often needed features, such as the ability to sign new archives using your own certificates. Also, I will enhance the existing test suite (which is admittedly small right now) to cover most of the import code paths in the framework, namely opening and writing archives, reading files, listing files, adding files and deleting files. Finally, I will commit to the repository an external patch adding GNUstep support and release a binary version for Linux thanks to that patch.

The mpqfs update will focus on bug fixes, performance and Linux support. The next big update will introduce write support. I do not know exactly when that will be (there are some difficult problems to deal with in order to have efficient read-write support), but I expect it will be around March.

Until then, happy holidays!

MPQFS 0.3 is now available. It is a small compatibility release that brings Leopard support. In addition, MPQFS was built for MacFUSE 1.0, which brings several enhancements to all FUSE filesystems and is required to run MPQFS 0.3. Finally, Sparkle has been integrated in the GUI wrapper for easy future updates.

Download MacFUSE from the MacFUSE website.
Download MPQFS 0.3.

The MPQKit and Riven X projects are ready for Leopard. You should have no problem building them using Xcode 3 for all supported architectures. If anything does go wrong, please let me know.

« Older entries § Newer entries »