Skip to content

GrimE

Adventure scripts meet a three-dimensional cast

GrimE powered LucasArts’ move to 3D characters in Grim Fandango. Its use of Lua connected authored adventure behaviour to the engine and contributed to a wider history of game scripting.

GrimE is the LucasArts adventure engine associated with Grim Fandango. It brought three-dimensional characters into the company’s adventure-making workflow and used Lua to express much of the game’s behaviour.

Earlier LucasArts adventures used SCUMM. GrimE continued the useful separation between an engine that supplies capabilities and scripts that arrange them into a particular game. Changing how a conversation unfolds need not mean rewriting the renderer.

Give the script a vocabulary

An embedded scripting language needs operations supplied by its host. A game can expose actions such as moving an actor, starting speech or changing a costume. A script combines those actions with decisions about what has happened and what should happen next.

ScummVM’s later GrimE reimplementation makes that boundary visible. Its Lua bindings register operations for actors, objects, dialogue and scenes, and its startup code loads the system script before entering the game loop. This is preservation work that recreates the engine’s behaviour; it is not LucasArts’ original engine source.

A connection to Lua’s development

Lua’s creators, Roberto Ierusalimschy, Luiz Henrique de Figueiredo and Waldemar Celes, recount the connection in their 2007 history of the language. Lead programmer Bret Mogilefsky contacted them in January 1997 after reading about Lua in Dr. Dobb’s Journal. Grim Fandango followed in October 1998.

Their account describes Mogilefsky’s changes for cooperative multitasking: scripts could give up execution while another activity progressed. That suits an adventure in which one character walks while another speaks and the scene keeps running.

Those changes belong to the game’s historical Lua integration. Lua’s own later coroutine facilities developed over subsequent versions. Keeping the versions distinct lets us see an exchange of ideas between a game team and language designers, rather than assuming the 1998 engine used today’s language unchanged.

Sources

Checked. Verified against primary sources and signed off by a person.