Google Summer of Code Summary

Posted on Aug 30, 2020

Over the past few months I’ve made 451 commits to the main ScummVM repository, largely in the Macromedia Director and MacGUI subsystems:

451 commits to ScummVM

Most of this work was focused on the reimplementation of Lingo, Director’s programming language, so that Director games can be played in ScummVM. You can find every commit here, but this is the overview:

  • I did extensive work on Lingo objects;
    • I implemented factories, Lingo’s first iteration of objects.
    • I wrote a simple framework for XObjects (external objects). I started by implementing the FileIO XObject, and several XObjects have now been implemented by other contributors.
    • I implemented parent/child scripts, the successor to factories.
    • I wrote a template that allows any class to expose Lingo properties and methods, now used on scripts, windows, and cast members.
  • I did extensive work to make our Lingo implementation more robust, including:
    • Refactoring the grammar, reducing its hundreds of conflicts to just a handful
    • Properly differentiating between commands and functions
    • Implementing Lingo errors
    • Lots of bug fixing
  • I improved reading Director movies from file:
    • I identified and wrote code to handle quite a few previously understudied parts of the file format.
    • I implemented a reader for Macintosh sound resources.
    • I added support for loading Shockwave movies.
  • I implemented many minor Lingo features.
  • I rewrote the Lingo event system so that events are correctly ordered and delegated across multiple concurrent movies.
  • I refactored the monolithic Score class into a Movie, a Score, and a Cast, making the engine more faithful to Director and improving maintainability.
  • I implemented Movies In A Window (MIAWs), adding support for multiple concurrent movies.
  • I recreated the looks of the Mac System 7 desktop to go with MIAWs.

With the work I’ve done this summer, in combination with the other team members’ efforts, the Director engine is much more robust and has a greatly enhanced feature set. It can run a decent subset of Director 2-4 movies, but there is still plenty of work to be done to ensure feature completeness and to support later versions. I plan to stick around to help with this.

In addition, while my hope of full support of a real Director game has not yet been realized, I’ve helped to lay the foundations for that. With the foundational elements of Director and Lingo in place, if a bit more love is given to some individual games, full support should be easily attainable.