Sometimes gamedev
Obsesses over projects
Not great at doing either
Current focus is Psychonauts


Psychonauts reverse engineering/modding blog
jillcrungus.com/projects/psychonauts/blog/
Mastodon, slightly less seldom used
mastodon.gamedev.place/@jill

The name's tentative, but unlikely to change...

So, Creative Labs ISACT. This is a now very old audio middleware built by Creative Labs and used by only a handful of games. So far it's been spotted in Mass Effect, a custom patch for UT2004, Mage Knight: Apocalypse, Vanguard: Saga of Heroes, and of course, Psychonauts.

ISACT is... kinda cool, actually. There are some INCREDIBLY ANNOYING QUIRKS WITH IT which I have suffered through but those aren't generally a fault of the software itself and more an artifact of how obscure and old and completely fucking lost it once was. (There is one problem I've had with it that is fault of the software but I'd get way off track if I talked about that again here)

I like ISACT a lot. We finally got hold of a basic version of the original SDK some time ago which includes C headers, libraries to link against and ISACT Production Studio, a tool which finally allowed us to edit and create ISACT's content and sample banks.

ISACT's quite easy to implement and use. It uses OpenAL and supports fancy EAX effects and in the modern day you can drag in OpenAL-soft for various benefits.

Unfortunately, what we have does not include any of the actual code for the libraries even though some version of the SDK with said code did exist at some point as evidenced by the code in the Linux port of Psychonauts. Unfortunately unless someone who works or worked at Creative who still has that code comes out and releases it (or perhaps someone who worked on a game which used that version of ISACT) it is lost media.

But I really do like ISACT. So that's why I want to rebuild it from the ground up.


So, I've started a new project: OpenISACT. I intend for OpenISACT to be an open source reimplementation of the two ISACT libraries that are used (at least by Psychonauts) - isactwin and AudioDrv. I intend for these to be drop-in replacements much like openal-soft is and I also intend to use the knowledge gained from working on these to maybe write a better tool for working with ISACT content than the crusty old proprietary production studio.

I've already started some work on this. In my last post I mentioned how a couple of extra nuggets of info on ISACT's architecture could be gleamed and how I might be putting that to use. This has actually proven to be somewhat annoying because AudioDrv is marked right there but other stuff is in the "ISACTEng" folder and that's not a library but it has SoundRandomizer in it which is part of isactwin soooooo... Yeah, not sure how to organise things in that regard but the idea of keeping the original layout was always more of a suggestion given that we don't even have the full picture.

So how am I going about this? Well, when Ryan Gordon ported Psychonauts to Linux, that also meant porting ISACT. Now I do believe ISACT may have had a Linux version but I think it may have either not been available or some other issue meant it wasn't viable to use it for the Psychonauts port. As a result, Ryan instead ported the Windows version of ISACT to Linux and then statically included it in the game executable itself (instead of the two-library seperation). Now, since Psychonauts on Linux is built in debug mode this means that Psychonauts on Linux's ISACT is also built in debug mode which makes it far easier, if still very very tedious and difficult, to analyse it and decompile it. So that's what I'm doing.

I've not made a ton of progress so far, I only just started the project today. I don't even know if I'll finish it, this is a huge undertaking and will really test my patience, mental fortitude and reversing skills and push me to my limits. I obviously intend to open up the repo but like how I approached projects such as Astralathe, this will be done at a later stage.

Now, there is the question of why do this.

Like I said, I genuinely think ISACT is very cool. Do I expect anyone to use it? Probably not. Do I intend to use it? Also... probably not. But it'll be a hell of a learning experience and will give some VERY valuable knowledge that I can use in future endeavours for modding Psychonauts' audio. Hell, if at some point a new tool for editing ISACT banks gets made it might prove very useful due to certain... issues in the interface with a couple specific features used by Psychonauts. Mainly that you literally cannot edit a specific type of property.

Finally, there's a miniscule chance that this may end up being something of a starting point for a much larger, more ambitious project but that's insanely unlikely because it'd be even more of a headache than this. You never know though, maybe if I finish this project my decompilation skills will have improved a lot.

I'll probably post about this project from time to time because I've found that writing (and then subsequently posting) about my projects really helps me stay on track with them. See all of my Psychonauts work for example, which I doubt would've gotten as far as it did had I not made the decision to constantly tweet about my efforts and coincidentally said efforts started to slow considerably when Twitter started going to shit. Strange.

Anyway, that's about it for introducing this weird thing. Hopefully I won't immediately drop off this by tomorrow.


You must log in to comment.