This article needs additional citations for verification. (August 2010) (Learn how and when to remove this template message)
|Designed by||Aric Wilmunder,|
? / 1998
Script Creation Utility for Maniac Mansion (SCUMM) is a video game engine developed at Lucasfilm Games, later renamed LucasArts, to ease development on their first graphic adventure game Maniac Mansion (1987). It was subsequently used as the engine for later LucasArts adventure games.
It falls somewhere between a game engine and a programming language, allowing designers to create locations, items and dialogue sequences without writing code in the language in which the game source code ends up. This also allowed the game's script and data files to be cross-platform, i.e., re-used across various platforms. SCUMM is also a host for embedded game engines such as the Interactive MUsic Streaming Engine (iMUSE), the INteractive Streaming ANimation Engine (INSANE), CYST (in-game animation engine), FLEM (places and names object inside a room), and MMUCAS. SCUMM has been released on these platforms: 3DO, Amiga, Apple II, Atari ST, CDTV, Commodore 64, Fujitsu FM Towns & Marty, Apple Macintosh, Nintendo Entertainment System, DOS, Microsoft Windows, Sega CD (Mega-CD), and TurboGrafx-16/PC Engine.
The original version was coded by Ron Gilbert (with some initial help by Chip Morningstar aka. UnXman) in 1987, with later versions enhanced by Aric Wilmunder (a.k.a., the SCUMM Lord) and various others. This is a token language that provided ground breaking coding techniques. Tokens like P.R.I.N.E. were the first to be utilized.
The nature of SCUMM emerged from the background of most of the early programmers at LucasArts, including Wilmunder, having been programmers for mainframe computers. At the time, personal computers (PC) did not have large enough abilities or speed to edit and compile programs, so often the LucasArts coders would write code as cleanly as possible on a mainframe system to remove all errors so that, while compiling on a PC would be slow, it would be less error-prone. This concept informed the idea of a scripting language that would be cross-platform.
SCUMM was developed to be a tool that converted human-readable commands into byte-sized tokens that then would be read by an executable interpreter program that presented the game to the player. For example, the SCUMM command
walk dr-fred to laboratory-door would be tokenized to a 4-byte command. They did not want to have specific details about a game hard-coded into the script, so the tokenizer would be able to recognize actors by their name from the script instead of by internal numbers. The only exception was to display a character's dialog in a different text color for Maniac Mansion in which they had to include the number, but this was subsequently revised by the time Zak McKracken was released. The scripts included the ability to multitask, such as having background actors enact behavior while waiting for foreground actions to complete. The combined tools enabled for rapid prototyping of a game. Scripters could work with preliminary character and background art drawn by the artists to hone their scripts while providing feedback to the artists.
The SCUMM program was responsible for tokenizing the scripts and gathering all other assets (such as art and sound) as a package. The reusable interpreter was called SPUTM, the SCUMM Presentation Utility (TM) which was renamed on shipment of the game to the name of the game's executable. SPUTM would interpret the scripts, load assets from disc, and handle the other user interactions with the game. SPUTM was not actually trademarked, but according to Wilmunder, they wanted "to name it after another bodily fluid". SCUMM was subsequently reused in many later LucasArts adventure games being both updated and rewritten several times. According to Wilmunder, the version of SCUMM for Maniac Mansion had about 80% of the commands that would end up being used in the later versions of the engine, with most key commands requiring no modification. Other tools and engines were developed alongside SCUMM to aid in development, and named for other body fluids. SPIT was used to manage text fonts on different parts of the screen. FLEM was used to define a specific room, track objects within it, and specify clipping planes for character animation. MMUCAS was used with FLEM to compile a room and its objects into one file that would enable the scripters to make rapid changes without having to recompile the room's description. BYLE and subsequently CYST were used for character animations and scaling, the latter used for the more complex art in LucasArts' later games.
For the game Full Throttle, the team worked to integrate SCUMM with the INSANE animation engine that had formerly been developed for Star Wars: Rebel Assault. Though Wilmunder had gotten the two systems to work for shipment of Full Throttle, the interaction between the two was not always stable, and spent time before The Curse of Monkey Island to have SCUMM work atop the INSANE engine, replacing some of the SCUMM engine parts to use that were native to INSANE.
Internally, much of the workings of SCUMM were undocumented, as Wilmunder believed that it was relatively simple to learn, but he changed this approach before The Secret of Monkey Island. To train new hires on the engine, Gilbert put them through SCUMM University, a week-long period where they were taught how to use the SCUMM engine. These new hires, called scummlets, then were given the opportunity to explore and expand on example work to help identify where they would best fit into the development team.
In March 2016 Wilmunder revealed that he would share design documents for many of LucasArts' adventure games and the source code for the SCUMM engine, which he plans to provide in digital format via GitHub.
Most SCUMM games feature a verb–object design paradigm. The player-controlled character has an inventory, and the game world is littered with objects with which the player can interact, using a variety of verbs. A large set of these were often featured at the bottom of the screen in the early games, but by Full Throttle (1995) and The Curse of Monkey Island (1997) these had been reduced to a "verb coin" appearing at the mouse cursor with the option to use character's eyes (to look), hands (to use, pick up, push, pull, etc.), or mouth (to talk, consume, inhale).
Puzzles generally involve using the right verb action with the appropriate object — "use biscuit cutter with rubber tree," for example. "Talk to" commonly produces dialogue sequences, in which the player selects from a list of predefined questions or comments, and the character they are talking to replies with a predefined response.
The notable exception to this general paradigm is Loom (1990), which does not use the standard verb–object interface, but replaces most actions with a selection of spells played on an instrument.
A similar project named ScummGEN aims to achieve the same thing, with user friendly tools.
Scummbler is a compiler for SCUMM bytecode, for versions 3 to 5 of the SCUMM engine. It uses scripts decompiled from the original game files, retrieved using a combination of an unpacking tool like ScummPacker (also by the author of Scummbler), and the descumm tool from ScummVM. These scripts can be re-inserted into the original game files, making it useful for modifying existing games, such as for translation. Also available are an image encoder-decoder, and a tool to assist in mapping speech files to text.
ScummVM is a free and open source software project to make a portable, Simple DirectMedia Layer (SDL) library-based SCUMM-engine client which allows many of the SCUMM-engine games to be played on systems where the original versions will not work or have trouble operating, including modern Windows and Macintosh systems, Linux (including portable handhelds – Android, GP2X, GP2X Wiz, Maemo, etc.), BeOS-Haiku, AmigaOS (3.x, 4.0, and its clones MorphOS and AROS), Palm OS, Windows Mobile (Pocket PC), Dreamcast, PlayStation 2, PlayStation Portable, Nintendo DS, Wii, Symbian (SeriesXX and UIQ), iOS (iPad, iPhone, iPod Touch), webOS and QNX-Playbook platforms.
scvm is a SCUMM interpreter developed by the ScummC author. As of April 2008, it is in a prototype state, and is meant to become a script debugger for ScummC development. hiscumm is an attempt to port scvm and some bits of ScummVM to the Haxe platform, to produce an interpreter with an Adobe Flash backend.
References and in-jokes
In-joke references were a common feature of LucasArts adventure games. Developers used the name of their engine for comic effect in several games.
Razor and the Scummettes, a punk band mentioned in Maniac Mansion, and the SCUMM bar in The Secret of Monkey Island are both named after the scripting language. In Escape from Monkey Island, victim of a hostile takeover, the SCUMM bar becomes the Lua bar, a nod to the programming language which replaced the engine used for the prior games. SCUMM is also listed in the ingredients of grog, in the first opus of the Monkey Island saga.
- GameSpot, "Classic Studio Postmortem: Lucasfilm Games" Archived 2015-09-04 at the Wayback Machine, Ron Gilbert, 24 March 2014, accessed 3 April 2015
- Bevan, Mike (July 21, 2013). "The SCUMM Diary: Stories behind one of the greatest game engines ever made". Gamasutra. Archived from the original on March 23, 2016. Retrieved March 23, 2016.
- Kerr, Chris (March 23, 2016). "SCUMM co-creator digs up game design treasure trove". Gamasutra. Archived from the original on May 30, 2016. Retrieved March 23, 2016.
- ScummC SCUMM Compiler Archived 2015-09-04 at the Wayback Machine
- ScummGEN Archived 2010-07-16 at the Wayback Machine
- Scummbler Archived 2014-08-02 at the Wayback Machine
- ScummPacker Archived 2013-11-08 at the Wayback Machine
- SCUMM Image Encoder Archived 2015-02-15 at the Wayback Machine
- ScummSpeaks Archived 2015-02-15 at the Wayback Machine
- SCUMMVM compatibility list Archived 2006-06-15 at the Wayback Machine
- DotSec Repository - scummc Read Me[permanent dead link]
- "What not to write in Haxe, Part II Archived 2015-05-19 at the Wayback Machine" (2008), Cuppadev
- JamesU's hiscumm git repository log[permanent dead link]