Those wacky programmers over at LucasArts have traditionally employed more acronyms than the most bloated of bureaucracies. They started out with SCUMM (Script Creation Utility For Maniac Mansion). Then there was SMUSH and INSANE, 2 other game engines. I think GRIME was another engine, developed for Grim Fandango. I probably have some of those details at least a little incorrect but I’m too lazy to do the research right now, and I know the ScummVM hackers will perform any corrections for me. (Update: Sure enough– check the comments for clarification.)
Why do I care about any of this? A number of games based on the SMUSH engine contain FMV files with the extension .san. This apparently stands for Smush ANimation. Many years ago, shortly after I gained interest in studying game-related multimedia formats, I received a request to study the SAN format. Some reverse engineering work had already been done and put into ScummVM but it was not quite complete and was also quite rough around the edges– the kind of RE work where ASM is more or less converted directly into C. I never could quite make heads or tails of it and sometimes thought it might be easier to just start over with the raw binary.
I think it’s finally time to get serious and and put the SAN format to rest! Who’s with me? Good, now let’s get down to business. First things first, samples! I have organized SAN samples from 11 different titles (although Outlaws and The Dig are represented twice in the count because of their demos): http://www.mplayerhq.hu/MPlayer/samples/game-formats/la-san/. That directory also contains the file TGSMUSH.DLL which is allegedly capably of playing every known variation of SMUSH files.
The SAN files have a pretty straightforward FourCC-chunk format that we multimedia hackers have all seen in dozens of formats before. What coding methods does the format use for audio and video compression? That’s the big question. Not unlike other game-specific FMV formats that evolved over time as their creators refined the concepts (I’m thinking of Westwood VQA and Interplay MVE), SAN went through a few iterations. It apparently employs a range of coding techniques. One audio codec is called VIMA — most likely an abbreviation for variable IMA ADPCM — that Cyril has done an amazing job of documenting. As for video codecs there are a number of codecs and subcodecs at work and the details are still not entirely clear. There is some RLE and there appears to be some vector quantization. Further, based on the RE work already in ScummVM it appears that SAN might use hierarchical VQ, also seen in Sorenson Video 1, as well as gradient blocks, also seen in Gremlin Digital Video (though still not documented in the Wiki).
For your inspection you can find the source for the ScummVM SAN video decoder here: http://omega.xtr.net.pl/misc/smush/. The binary DLL is also available as mentioned previously. Cyril has started a new page on Smush. I think we have all the resources we need to attack this. Let’s see what we can come up with.
You’re not right about engines: they are just parts of global game engine. SMUSH is video decoder, IMUSE is for music, INSANE has to do something with actors. Memory management engine was called VHUMOR.
BTW, IIRC, there is motion compensation is also there.
Like Kostya said. GrimE is the engine used to write Grim Fandango and Escape From Monkey Island. It stands for “Grim Editor” =)
Correct spelling is iMUSE (Interactive Music Streaming Engine). Also there is AKOS for actors, diMUSE for digital music. All of these are small script languages. INSANE deals with actors on top of SMUSH video, I suspect that it was a huge pile of macros. In fact, SCUMM is set of tools to create games. To play them they used SPUTM engine, Scumm Presentation Utility (TM). For some more deabbreviations visit http://wiki.scummvm.org/index.php/Glossary
AAAAHHH! Make it stop! Too many acronyms and I still haven’t figured my income taxes for this year! :)
Also worth mentioning the PC demo of Full Throttle, which is available from http://quick.mixnmojo.com/demos/ftdemo.zip
It is based off any early version of Full Throttle and include some unique
examples of SAN format, since it was one of the earliest games to use the format.
In particular ‘minedriv.san’ is a good example, which currently doesn’t play under
ScummVM.
An update to last post:
The issues with ‘minedriv.san’ in PC demo of FT were related to INSANE,
and not SAN format differences.
Either way, I have the minedriv.san file from the Full Throttle demo at:
http://www.mplayerhq.hu/MPlayer/samples/game-formats/la-san/fullthrottle-demo/
The decoder linked is that from Residual, a reimplementation of the Grim Fandango engine (by the ScummVM project). As such it only deals with SNM, not SAN. If you want to see the SAN decoders look in ScummVM.
http://www1.mplayerhq.hu/MPlayer/samples/game-formats/la-san/fullthrottle-demo/minedriv.san