Sunday, 15 March 2026

Over the past few months I have been dipping in and out of a bunch of tasks, Now that my kids are a little more independent I found some time to return to ScummVM. It’s been quite a while since I last did anything meaningful, and there were several long standing tasks that I’ve wanted to tackle for years. Getting back into the project has been a reminder of just how much interesting work remains in improving support for these games.

Much of my recent work has focused on improving support for less common platform versions.

Simon the Sorcerer (Acorn Archimedes)

One area I spent time on was Simon the Sorcerer on the Acorn Archimedes. The Acorn version uses compressed MOD music, specifically DesktopTracker. The MODS were originally converted directly to the DTT format from the original Amiga MODS. I implemented proper playback for these decompressed MODS so that the soundtrack now works as intended.

While working on this version I also fixed a palette issue affecting the Simon the Sorcerer demo, where Simon’s sprite would render black due a quirk of the original interpreter which was running VGA scripts directly on startup. With the fix in place, Simon now appears correctly.

Before:

After:

To make working with this version easier, I wrote a tool to extract and decompress the game data directly from Acorn disk images. The original installer for the game is somewhat flaky and needs to be run inside an emulator to properly decompress the files. The tool extracts and decompresses the assets directly and works by directly reading the ADF disk images.

Platform-specific cursors

I added several original cursors across different game versions. I feel this is important as it really helps give the games a more authentic feel.

The following cursors are now supported:

  • The system cursor used in Simon the Sorcerer for Acorn Archimedes
  • The cursor used by Maniac Mansion on the Apple II
  • The “wait” cursor used in the Sega CD version of The Secret of Monkey Island. This one doesn't really have a proper place since we don't load from the CD and loads are instant, but I wanted it for completeness. It's currently only used on the pause menu.

Maniac Mansion (NES)

I added support the original title screens, including the animation and the small “twinkle” sound effects that the Lucasfilm title screen uses. This was originally done before the engine initialised, so it's not really SCUMM, but it helps to ensure that the game feels authentic.

I also fixed an issue where the Maniac Mansion scrolling logo would get stuck. The script for this room expects a 224px wide view. Since ScummVM runs at 256px wide, the camera never quite reached the position the original script was waiting for, so the intro would hang until you hit ESC. This was a pretty minor script patch.

Elvira (Atari ST)

I added support for the Atari ST YM music used by Elvira 1 and Elvira II. These versions use the YM2149 sound chip. Elvira 1 used a custom audio driver which needed to be reversed, but Elvira 2 was a simple command stream, this was much easier.

During this process, I discovered that the game actually ships with several unused music tracks. The game scripts call out to them but the PRG actually does a remap and it only uses about 4 of the 7 tracks. Perhaps adding some of them back in could be a nice future enhancement.

Personal Nightmare (DOS) charset rendering

Another task involved Personal Nightmare for DOS. While working on this game I implemented the original charset squeezing routine used by the DOS version. Kirben had sent me a disassembly of the squeezing routine a long time ago, I just never got around to it. It turns out the same technique was used for the Amiga demo of Elvira 1 so I added that too.

Before:

After:

While I was looking at the DOS charset rendering for Personal Nightmare, I noticed something interesting about it.

It dates back to at least 1983, appearing in the ZX Spectrum port of Escape from Pulsar 7, and it was reused across several of the Adventure Soft Spectrum titles. In Seas of Blood (1985), it appears in its original, unsqueezed form. However, by the time Blizzard Pass was released on Spectrum in 1986, the charset had been squeezed in exactly the same way it appears in Personal Nightmare.

Escape from Pulsar 7:

Blizzard Pass:

So the change clearly happened between those two releases. I still do not know what prompted the squeeze, maybe so the screen could accommodate more text.

SCUMM playback system

I worked on the SCUMM engine playback system, which was used by the DOS Monkey Island 2 demo to drive its demo loop via demo.rec.

At its core, the playback format is basically a stream of mouse events. However, the demo executable shipped with the SPUTM debugger attached, and the recorded demo stream includes two events that control the debugger in order to jump into different rooms.

While looking into this, I found that the feature had been left enabled in several other SCUMM games, including Monkey Island 1, Monkey Island 2, and Fate of Atlantis. There may be others, but those are the ones I know about so far.

The Monkey Island 2 demo now works in ScummVM using the original GUI, and I have added support for loading original playback files created with these other games in the original interpreter.

I am considering a future task to allow ScummVM to write its own event streams and save them out in the original format, though I am not sure how much more time I want to spend on this.

Ron confirmed this feature was originally hacked together by himself and Aric in their hotel room at CES, so they could have a rolling demo of Monkey Island 1 on the show floor.

WHAT NOW?

I'm also working on some larger tasks in different states.

I’m currently working on DOS EGA support for Elvira 1 and Elvira 2. Elvira 1 is mostly working, but I'm trying to resolve an issue with some compressed images.

The issue happens in the falcon scene:

I'm working on adding support for the Amiga version of TeenAgent. The original game source was provided back when I was working with Whoozle on the DOS version, but we never looked at it since the DOS disassembly was pretty much complete at that time. It can currently render rooms and play the game music.

Alongside that, I’ve also started reverse engineering and reimplementing Scooby-Doo Mystery for the Sega Genesis, I'm loading rooms and I've got Scooby and Shaggy walking around. It's a beautiful game, very reminiscent of Day of the Tentacle visually.