Post

Sanitarium: The ScummVM Asylum Engine Journey Concludes

With PR#2982 - ENGINES: Sanitarium engine being recently merged into ScummVM I wanted to take some time to chronicle the original development efforts which began in 2009.

At the time I was looking to work on a new engine in an attempt to improve my knowledge of C++ as well as to “give something back” to the open source community. Some of the engines I was toying with at the time included one’s for Uplink: Hacker Elite, the Dynamix Game Development System as well as Sanitarium.

When I first played Dreamforge’s Sanitarium (the Razor 1911 rip at the time …) I was immediately drawn to the darker story and ambiance. After finishing it I ended up buying the full version and replaying it several times. Though the gameplay was linear I found myself continually drawn into the world and the story.

I began working on an engine for Sanitarium, but soon found a post on the ScummVM forums by someone trying to do the same thing. I reached out to Alex Fontoura as he had also been reverse engineering the game’s executable (sntrm.exe) and we decided to merge our efforts.

We began collaborating on an IDA Pro project to see how far we could get. Filippos Karapetis, a veteran ScummVM developer, also joined us early on and helped correct quite a few bad C++ habits both Alex and I had at the time :P

With Filippos’ help and an old Gamasutra Postmortem article providing some insight as to the inner workings of the game, we were making rapid progress. To expedite our efforts I started digging for more “insider” information, so using the Moby Games Credits page for Sanitarium I started “cold-calling” (emailing) some team members.

One team member I was able to get a hold of was Mike Breitkreutz (via MySpace), who shared what he remembered.

Benjamin Haisch (aka. John Doe), another ScummVM team member, had by this point provided a far superior IDA database to work from which we used until Julian Templier joined us in 2010 and essentially finished the IDA RE efforts.

Julian implemented the event processing subsystem and the save/load functionality along with cleaning up a lot of the codebase. His blog shares some of the progress from July 2011 which is shortly before he left to focus on other work (such as the Ring engine).

Our progress stagnate from 2012 through 2015, at which point I published a progress update in hopes of reigniting interest …. it didn’t work.

Fast forward to 2021 and we find out that Alexander Panov has picked up the development and completed the engine! The outstanding work left was the inventory management, encounters and a number of bugfixes, which he was able to get sorted out over the course of a few months.

Alexander is now a member of the ScummVM team, and thanks to his efforts this 12 year journey can finally conclude with a working engine merged into ScummVM that will allow countless others to enjoy Sanitarium.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.