The Wayback Machine - https://web.archive.org/web/20150904033643/https://github.com/AlbanBedel/scummc
Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with or .
Download ZIP
A Scumm Compiler
C Bison C++ Makefile Assembly Eagle Shell
Branch: master
Failed to load latest commit information.
cf ScummC source files are now named .sc[ch], fix running the
examples openquest/actors: The roaming array needs to store integers
include Streamline the examples Makefiles and add automatic distribution build.
man Soun tool now supports generating SBL and SPK SOUN blocks
patches patches: Add the ScummC support patch for ScummVM 1.7.0
Doxyfile First doxygen wave.
LICENSE Add the LICENSE file, headers for the sources
Makefile Streamline the examples Makefiles and add automatic distribution build.
Makefile.defs Move the object functions to their own file.
Makefile.distrib Streamline the examples Makefiles and add automatic distribution build.
Makefile.target Remove scummc-config.mak.sample from the distribution.
README.md Update readme to markdown to look nice on gitub
boxedit.c Fixed GTK warnings about setting an adjustment with non-zero page size
char.c Silence various compiler warnings
code.c First doxygen wave.
configure configure: Fix the readline test
cost_lexer.c Change the costume grammar to get rid of the limb picture index.
cost_parse.y Added error message about unsupported costume palette sizes
costview.c Silence various compiler warnings
decode.c Properly render objects with a transparent background.
imgremap.c Replace the old usage message with those generated from the man pages.
imgsplit.c Replace the old usage message with those generated from the man pages.
midi.c Replace the old usage message with those generated from the man pages.
palcat.c Replace the old usage message with those generated from the man pages.
raw2voc.c Replace the old usage message with those generated from the man pages.
rd.c Spelling, punctuation, grammar and other fixes on the messages.
read.c A few more spelling fixes
scc.h Move the box related code out of boxedit.c into scc_box.[ch].
scc_box.c Make the actors follow the boxes.
scc_box.h Make the actors follow the boxes.
scc_char.c Silence various compiler warnings
scc_char.h Add support for reading NUT charsets.
scc_code.c Add support for default argument values.
scc_code.h First doxygen wave.
scc_codec.h First doxygen wave.
scc_cost.c Silence various compiler warnings
scc_cost.h Fix the costume render to properly handle hidden limbs.
scc_fd.c Fix scc_fd_write to not write in the input buffer.
scc_fd.h First doxygen wave.
scc_func.h Add support for default argument values.
scc_img.c 1000L fix (pointer instead of integer) in the BMP RLE decoding.
scc_img.h First doxygen wave.
scc_ld.c Silence various compiler warnings
scc_lex.c Allow ignoring missing include files.
scc_lex.h Allow ignoring missing include files.
scc_lexer.c Add support for returning value from scripts.
scc_ns.c Properly handle room variable in the ns.
scc_ns.h Rework the multiple target support. Add a struct to define together
scc_param.c Add support for generating help/usage message from the man pages.
scc_param.h Add support for generating help/usage message from the man pages.
scc_parse.h Fix compilation with latest version of bison
scc_parse.y Fix compilation with latest version of bison
scc_roobj.c Silence various compiler warnings
scc_roobj.h Allow objects to have a transparent color. The transparent part are
scc_smf.c Spelling, punctuation, grammar and other fixes on the messages.
scc_smf.h Add a midi hacking tool.
scc_target.c Add support for returning value from scripts.
scc_util.c Spelling, punctuation, grammar and other fixes on the messages.
scc_util.h Add toupper and tolower macros.
scvm.c Set the engine vars TIMER and TIMER_TOTAL.
scvm.h scvm: object: Replace the flags field with parent_state
scvm_actor.c Implement walking actors to objects.
scvm_dbg.c scvm: dbg: Fix crash when calling 'show avar' without parameters
scvm_object.c scvm: Fix scvm_get_object_at() for objects with a parent
scvm_op.c scvm: Fix the 2 dimensional array write functions
scvm_res.c scvm: object: Replace the flags field with parent_state
scvm_res.h Add a way to load objects without the full room.
scvm_string.c Implement debugPrint().
scvm_thread.c Fix most of the pointer sign warnings.
scvm_thread.h Fix most of the pointer sign warnings.
scvm_verb.c Fix scvm_get_verb_at() with centered verbs.
scvm_view.c scvm: view: Fix the actor rendering order
soun.c Soun tool now supports generating SBL and SPK SOUN blocks
write.c Silence various compiler warnings
zpnn2bmp.c Replace the old usage message with those generated from the man pages.

README.md

ScummC - A Scumm Compiler

I. What is ScummC ?

ScummC is a set of tools allowing to create SCUMM games from scratch. It is capable to create games for SCUMM version 6 (used by Day Of The Tentacle, aka dott) and somewhat support version 7 (used by Full Throttle).

II. This release

This release mark a new important milestone: it is finally possible to create a 100% free SCUMM game.

In this release you will find:

  • scc : the compiler
  • sld : the linker
  • boxedit : a room box editor
  • cost : a costume compiler
  • char : a charset converter
  • costview : a costume viewer/editor prototype
  • soun : a simple soun resources builder
  • midi : a tool to hack MIDI files

Some utilities that might (or might not) be useful with SCUMM related hacking.

  • zpnn2bmp : convert ZPnn blocks to bmp
  • imgsplit : split a bmp (it conserve the palette)
  • imgremap : exchange two colors (both palette and data)
  • palcat : combine bmp palettes.
  • raw2voc : read some raw 8bit unsigned samples and pack them in a voc.
  • scvm : a VM prototype that should become a debugger some day.

III. Compiling it

Requirements:

  • GNU make >= 3.80
  • bison (minimal version between 1.28 and 1.35)
  • GTK >= 2.4 (for boxedit and costview)

Optional libraries:

  • Freetype (to build charsets from ttf fonts)
  • SDL (for scvm)
  • xsltproc (for the man pages and help messages)

To compile just run configure and then make (or gmake). If you want to also compile the extra utilities run make all. To see all available targets run make help.

Only GNU/Linux i386 is fully tested, however in the past the code was regularly tested on the (now defunct) sourceforge compile farm. So the following platforms should still be fully supported:

  • GNU/Linux i386 amd64 alpha openpower
  • NetBSD i386
  • FreeBSD i386
  • OpenBSD i386
  • Solaris i386 sparc
  • OSX i386 ppc

Mingw is only supported via cross-compiling because the Makefiles aren't working with MSys. Cygwin status is currently unknown.

IV. What can i do with that ?

Already quite a lot ;) All major features from the engine are usable, and a full game can be built from scratch. SCUMM version 6 is the default target, but version 7 is also partially supported.

V. Getting started

An example is provided. Just cd into one of the example directory and run make. If all went well it should produce 3 files: scummc6.000, scummc6.001 and scummc6.sou.

To run ScummC games with ScummVM their is two ways. The recommended way is to patch ScummVM to have it recognise ScummC games and run them without any game specific hack. Otherwise you can run the game as Day of the tentacle, this is not recommended because a few hacks might kick in. However that shouldn't be a problem with small test games.

To patch ScummVM cd in your ScummVM source directory and run: patch -p1 < ~/scummc-X.X/patches/scummvm-Y.Y.Y-scummc.diff

Alternatively you can use the original LEC interpreter, but be warned that a few things (namely save/load) are currently not working with it. Not that you really need to save in the example game ;)

Note that to run the game as Day of the Tentacle with ScummVM or with the LEC interpreter you must give the following extra options to sld: -o tentacle -key 0x69. For the LEC interpreter you must also rename tentacle.sou to monster.sou.

Documentation is currently limited, the two most useful sources are:

VI. The box editor

This tool allow you to define the boxes in your room in a graphical manner and to name them for easy reffering in the scripts. Be warned that the interface is perhaps a bit unusual. The 2 open and save buttons should be self-explicit. But both have an alternative action if clicked with a shift key pressed. Namely open a background image and save as. On the view you have following actions:

  • left button : add point to the selection
  • right button : remove point from the selection

  • shift+left button : add box to the selection

  • shift+right button : remove box from the selection

  • ctrl+left button : select other point (a point need to be selected first)

  • ctrl+right button : select other box (a box need to be selected first)

  • left button drag : move the selection

  • middle button drag : move the view

There are also the following keys:

  • b : create a new box
  • d / suppr : delete the selection
  • esc : clear selection
  • u / q : undo
  • r / o : redo
  • > / + : zoom in
  • < / - : zoom out
  • s : save
  • S : save as

I'm using a Dvorak layout so the o/q are well placed, i put u/r as alternative because they are easy to remember. However i would be glad to add some qzerty friendly bindings.

On the command line you can specify a box filename and/or a background image with the -img parameter.

VII. Warning and other legal stuff

Be warned this is still beta, some features are still missing. Use at your own risk. All the code has been written by myself and is under GPL. Some bit of code have been stolen (ie. copy/pasted and c-ifier) from scummvm. I don't have time for legal stuff at the moment so just play fair ;)

VIII. Thanks

Big thanks to all ScummVM coders and contributors. All this would have never been possible without you !!!!

Big thanks to David Given, http://www.cowlark.com/scumm was a very useful source.

Big thanks to sourceforge.net for the compile farm that allowed making this software portable on 10 different platforms.

Big thanks to Jesse McGrew and James Urquhart for their contributions.

Big thanks to Gerrit Karius for OpenQuest and generally making this project move forward.

And last but not least, thanks to the few people how at least tried to compile and perhaps even used a bit one of those early versions.

IX. Contact

ScummC have a project page at Gna!: http://gna.org/projects/scummc/ There you can find our mailing list, bug tracker, etc

For anything relevant to ScummC and SCUMM games developement use the mailing list scummc-general@gna.org, for anything else I can be reached at albeu@free.fr.

Patches and suggestions of all kinds are always welcome!

Something went wrong with that request. Please try again.