A Scumm Compiler
Switch branches/tags
Nothing to show
Clone or download
AlbanBedel Release 0.2.1
Quiet a lot has happened and most build issues with current systems
have been fixed, so lets make a new release.
Latest commit 8fa4a65 Jul 26, 2018
Permalink
Failed to load latest commit information.
cf ScummC source files are now named .sc[ch], fix running the Nov 27, 2006
examples example: Add the v7 akos to the clean rule Oct 21, 2017
include Streamline the examples Makefiles and add automatic distribution build. Jul 27, 2013
man Soun tool now supports generating SBL and SPK SOUN blocks Sep 21, 2014
patches patches: Add the ScummC support patch for ScummVM 1.7.0 Apr 7, 2015
.appveyor.yml build: Enable GTK+ for the build on AppVeyor Oct 22, 2017
.gitignore Add .gitignore for the tools and examples Oct 21, 2017
.travis.yml build: Keep builds on travis going even after an error Oct 22, 2017
Brewfile build: Change to brew bundle for osx dependency management Oct 22, 2017
Doxyfile First doxygen wave. Nov 9, 2006
LICENSE Add the LICENSE file, headers for the sources Jun 29, 2005
Makefile Streamline the examples Makefiles and add automatic distribution build. Jul 27, 2013
Makefile.defs Release 0.2.1 Jul 26, 2018
Makefile.distrib Streamline the examples Makefiles and add automatic distribution build. Jul 27, 2013
Makefile.target build: Remove a stray tab in Makefile.target Oct 21, 2017
README.md docs: Update the supported platforms list in README.md Oct 22, 2017
boxedit.c Fixed GTK warnings about setting an adjustment with non-zero page size Sep 21, 2014
char.c char: Fix the pointer signedness warnings Oct 21, 2017
code.c First doxygen wave. Nov 9, 2006
configure configure: Silent the test call to pkg-config for gtk Oct 22, 2017
cost_lexer.c Change the costume grammar to get rid of the limb picture index. Jul 27, 2013
cost_parse.y cost_parse: Fix always false comparison Oct 22, 2017
costview.c Silence various compiler warnings Sep 21, 2014
decode.c Properly render objects with a transparent background. Jul 27, 2013
imgremap.c Replace the old usage message with those generated from the man pages. Jul 27, 2013
imgsplit.c Replace the old usage message with those generated from the man pages. Jul 27, 2013
midi.c Replace the old usage message with those generated from the man pages. Jul 27, 2013
palcat.c Replace the old usage message with those generated from the man pages. Jul 27, 2013
raw2voc.c Replace the old usage message with those generated from the man pages. Jul 27, 2013
rd.c Silence the warnings from the old testing code Oct 21, 2017
read.c A few more spelling fixes Jul 27, 2013
scc.h Move the box related code out of boxedit.c into scc_box.[ch]. Jul 27, 2013
scc_box.c Make the actors follow the boxes. Jul 27, 2013
scc_box.h Make the actors follow the boxes. Jul 27, 2013
scc_char.c Silence various compiler warnings Sep 21, 2014
scc_char.h Add support for reading NUT charsets. Jul 27, 2013
scc_code.c scc: Fix a pointer signedness warning Oct 21, 2017
scc_code.h First doxygen wave. Nov 9, 2006
scc_codec.h First doxygen wave. Nov 9, 2006
scc_cost.c Silence various compiler warnings Sep 21, 2014
scc_cost.h Fix the costume render to properly handle hidden limbs. Jul 27, 2013
scc_fd.c scc_fd: Fix reading data on MinGW Oct 22, 2017
scc_fd.h First doxygen wave. Nov 9, 2006
scc_func.h Add support for default argument values. Jul 27, 2013
scc_img.c scc_img: Fix parsing BMP images with default number of colors Dec 6, 2017
scc_img.h First doxygen wave. Nov 9, 2006
scc_ld.c Silence various compiler warnings Sep 21, 2014
scc_lex.c Allow ignoring missing include files. Jul 27, 2013
scc_lex.h Allow ignoring missing include files. Jul 27, 2013
scc_lexer.c Add support for returning value from scripts. Jul 27, 2013
scc_ns.c Properly handle room variable in the ns. Jul 27, 2013
scc_ns.h Rework the multiple target support. Add a struct to define together Jul 27, 2013
scc_param.c Add support for generating help/usage message from the man pages. Jul 27, 2013
scc_param.h Add support for generating help/usage message from the man pages. Jul 27, 2013
scc_parse.h Fix compilation with latest version of bison Sep 21, 2014
scc_parse.y scc: Use %define api.pure instead of the deprecated %pure-parser Oct 21, 2017
scc_roobj.c Silence various compiler warnings Sep 21, 2014
scc_roobj.h Allow objects to have a transparent color. The transparent part are Jul 27, 2013
scc_smf.c Spelling, punctuation, grammar and other fixes on the messages. Jul 27, 2013
scc_smf.h Add a midi hacking tool. Nov 1, 2006
scc_target.c Add support for returning value from scripts. Jul 27, 2013
scc_util.c util: Fix the mingw glob() replacement to return full path Oct 22, 2017
scc_util.h util: Add the missing declaration of sig_t on mingw Oct 22, 2017
scvm.c scvm: Fix the signal save/restore on mingw Oct 22, 2017
scvm.h scvm: object: Replace the flags field with parent_state Oct 1, 2014
scvm_actor.c Implement walking actors to objects. Jul 27, 2013
scvm_dbg.c scvm: dbg: Fix crash when calling 'show avar' without parameters Oct 1, 2014
scvm_object.c scvm: Fix scvm_get_object_at() for objects with a parent Oct 1, 2014
scvm_op.c scvm: Fix the 2 dimensional array write functions Sep 21, 2014
scvm_res.c scvm: object: Replace the flags field with parent_state Oct 1, 2014
scvm_res.h Add a way to load objects without the full room. Jul 27, 2013
scvm_string.c Implement debugPrint(). Jul 27, 2013
scvm_thread.c Fix most of the pointer sign warnings. Jul 27, 2013
scvm_thread.h Fix most of the pointer sign warnings. Jul 27, 2013
scvm_verb.c Fix scvm_get_verb_at() with centered verbs. Jul 27, 2013
scvm_view.c scvm: view: Fix the actor rendering order Oct 1, 2014
soun.c Soun tool now supports generating SBL and SPK SOUN blocks Sep 21, 2014
write.c Silence the warnings from the old testing code Oct 21, 2017
zpnn2bmp.c Replace the old usage message with those generated from the man pages. Jul 27, 2013

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

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 >= 2.7
  • 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.

The code is now continuously tested with Travis CI and AppVeyor, the following platforms are currently known to work:

  • GNU/Linux x86
  • Mingw64 x86 (native and cross compiled from GNU/Linux)
  • OSX x86

Past versions have been known to build on NetBSD, FreeBSD, OpenBSD, Solaris, OS2 and AmigaOS.

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. The example games can be built as Day of the Tentacle by running make tentacle.

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 who at least tried to compile and perhaps even used a bit one of those early versions.

IX. Contact

ScummC is hosted on github: https://github.com/AlbanBedel/scummc There you can find the wiki, bug tracker, etc

For anything relevant to ScummC and SCUMM games developement use the github bug tracker at https://github.com/AlbanBedel/scummc/issues, for anything else I can be reached at albeu@free.fr.

Patches and suggestions of all kinds are always welcome!