laurence dougal myers


A SCUMM script compiler with support for SCUMM V3, V4, and V5. It can parse text files as output from ScummVM's descumm tool. Very useful for hacking existing LucasArts adventure games. Check out the manual for more information.

This tool is licensed under the MIT license.


Latest Version

v2 r15 (2011-07-12)
  • Fix "drawObject" in V3-4.
  • Fix "getState" instruction's syntax.
  • "debug?" instruction renamed to "debug".
  • "PutCodeInString" - add support for a missing 2nd argument (as output by descumm).
  • Restructure code path structure, separate out some tests.
  • Added some tests based on my attempt to parse MI1 global scripts.
  • Change license to MIT license.
  • Update build scripts.
  • Update to the manual - change info for "getState", add support e-mail to contact list.


These downloads are for version:
v2 r15

(Older downloads can be found on the "History" tab)

Source Code

Requires Python 2.5 (and modified PyParsing 1.5.1+, included in the source package)


v2 r4 (2009-05-02)

A suite of example scripts that can be used to test the operation of Scummbler. It contains all the scripts from the block of room 4 of MI2, some scripts from other games, and a couple with Scummbler-specific tests. NOTE: these tests are probably outdated now.



Version: v2 r15

Last updated: 2011-07-12

An online copy of the Scummbler manual.


v2 r14 (2010-12-22)

Release Notes

  • Add support for inline string functions, like "wait", "newline", "sound", "getInt", "setColor", etc.

Source Code

Requires Python 2.5 (and modified PyParsing 1.5.1+, included in the source package)

v2 r13 (2010-08-20)

Release Notes

  • Much more accurate error reporting.
  • PyParsing library now included in the source.
  • Fix example script in the manual (escape codes were "x033" instead of "x03").

Source Code

Requires Python 2.5 (and modified PyParsing 1.5.1+, included in the source package)

v2 r12 (2010-08-03)

Release Notes

  • Fix drawBox modifying main opcode instead of auxilliary opcode.
  • Fix drawObject using wrong sub-opcode.
  • Fix saveVerbs/restoreVerbs outputting the wrong opcode.
  • Fix SetPalColor outputting a word instead of a byte for last parameter.
  • Fix the auxilliary opcode values for SetPalColor, drawBox, setRGBRoomIntensity.
  • Supports new descumm formatting, also with support for legacy descumm. Some workarounds in place since descumm's output is still a bit buggy.

v2 r11 (2009-10-28)

Release Notes

  • Should really return error codes now.
  • Fix issue with cursorCommand instruction not being parsed at all.

v2 r10 (2009-10-08)

Release Notes

  • Catches all exceptions - should always return an error code now.

v2 r9 (2009-10-07)

Release Notes

  • You can now specify an output file name with the "-o" option.

v2 r8 (2009-09-22)

Release Notes

  • Fix issue with nested "if" blocks; scripts now compile considerably faster.
  • Fix issue with "duplicate label name" error throwing a different error.
  • Binaries include verb_helper, for extracting extra object info for V3/V4 VERB scripts.

v2 r7 (2009-07-25)

Release Notes

  • Fix problems with delayVariable and loadRoomWithEgo instructions.

v2 r6 (2009-07-23)

Release Notes

  • Actually works now. I hope.

v2 r5 (2009-07-04)

Release Notes

  • Supports V3 and V4 scripts.
  • Supports all script types.
  • Some other nice things.

v2 r4 (2009-05-02)

Release Notes

  • More fixes for instructions with wrong opcodes (e.g. print.Text()).
  • Code refactored in preparation for supporting other SCUMM versions.

v2 r3 (2009-05-01)

Release Notes

  • Fixed missing stringOps instructions.
  • Fixed issue with expression mode that has a single value or embedded instruction.
  • Some code cleanup.

v2 r2 (2009-04-27)

Release Notes

  • Forgot to include lgpl.txt, whoops!

v2 r1 (2009-04-26)

Release Notes

  • Completely re-written from scratch.
  • Parses & compiles the output from descumm.
  • Only supports V5.
  • Has a few nice additions like loops, defined values.
  • Only supports outputting local or global scripts; for object code, entry scripts etc you will need to modify the header manually.
  • Multiple nested 'if' blocks or loops are slow to parse.