I’ve been working on porting my implementation of the Comprehend adventure game engine (https://github.com/RyanMallon/recomprehend) to ScummVM. The Comprehend engine was developed by Polarware and used to create a number of graphical/text adventure games including Transylvania, Crimson Crown and Oo-Topos. The game Transylvania holds a bit of nostalgia for me as it was the very first adventure game I ever played way back on the Apple ][. The games were later ported to a variety of platforms including DOS, which is the version I reverse engineered.
Currently the only game supported is Transylvania, and though there is still a bunch of work to support the engine properly a full play through of the game is possible.
I’m not a C++ developer, so I’ve been stumbling my way through the porting work. I have found the ScummVM source base very cleanly designed and easy to work with though.
If you want to give it a try (you will need a copy of the DOS version of Transylvania):
git clone https://github.com/RyanMallon/scummvm.git git checkout comprehend ./configure make ./scummvm
There are a bunch of things that still need to be done:
- The code is still a bit of a mess. I’ll need to tidy it up before attempting to get this merged.
- Only Transylvania is currently supported (and only one of its handful of DOS variants). My Re-Comprehend implementation supports Crimson Crown and Oo-Topos also, so those games will eventually be added.
- The title, before game and ending screens are not implemented for Transylvania.
- The graphics don’t emulate the CGA correctly. The DOS version of the game use a 128 colour palette which maps to dithering fills for the 4 colour CGA mode. I simplified my implementation of the graphics code by just using solid colours. Some of the colour choices need tweaking.
- The graphics bleed in a few places. This is probably caused by the line algorithm provided by ScummVM not exactly matching the one used by the original Comprehend games.
- The sentence parser is very basic. It does not yet handle word pairs (the original engine can convert some pairs of words into a single token) or conjunctions.
- Pressing enter to flip between full text and graphics modes doesn’t work as it did in the original games.
Finally, a massive thanks to Mark Pelczarksi, one of the developers of the original Comprehend games. I contacted him after doing the reverse engineering work, and he took the time to dig out some old material and give me some insight on the design of the original engine.