DDirectorWikiDirector & Lingo Encyclopedia

Welcome to DirectorWiki

DirectorWiki

A structured, searchable reference for Macromedia / Adobe Director, Shockwave, and the Lingo scripting language. The content combines the official Director MX 2004 documentation corpus with original reverse-engineering research into the native runtime binaries. It is written for the people doing the work: emulator developers, preservationists, and anyone reading decompiled Lingo from an old game.

Director was discontinued in 2017 and Shockwave in 2019, leaving thousands web games without an official runtime. This wiki documents three layers of knowledge needed to keep that content running:

  1. The documented surface: the Lingo language and the Director scripting API as Macromedia shipped it.
  2. The behavioral contract: event ordering, message routing, ink compositing, hit testing, and the other semantics that documentation under-specifies but old movies depend on.
  3. The native truth: findings recovered from Director.exe, Dirapi.dll, Iml32.dll, and the Shockwave players with Ghidra: symbol tables, property descriptors, compositor callbacks, presentation logic.

Evidence levels. Native Internals pages label claims by strength: manual (official documentation), native table (symbol/string tables found in binaries), native code (decompiled implementation), microtest (verified against a real Director runtime). Anything below native code is a map, not proof.

Contents

Getting Started

PageCovers
What is Director?History and version timeline 1987-2019, the Director/Shockwave/Lingo/Xtra split, why preservation is hard.
File Formats.dir/.dxr/.dcr/.cst/.cxt/.cct, the RIFX container and its chunks, afterburner compression, Lingo bytecode layout, projectors, signature-based identification.
GlossaryDefinitions for every Director/Lingo term used on this wiki.
Links & DownloadsDirector installers on archive.org, Shockwave Player, emulators, decompilers, manuals, community archives.

Lingo Language

PageCovers
Lingo BasicsThe five script types, handlers, verbose vs dot syntax, the JavaScript syntax mode, comments and continuation.
Variables, Operators, Control FlowLocal/global/property scope, assignment forms, operator precedence, if/case/repeat, calling conventions, the result.
Data Types and CoercionEvery value type, constants, type predicates, truthiness rules, numeric/character coercion, symbols, points, rects, colors.
Lists and Property ListsBoth list kinds, access and mutation APIs, sorting, reference semantics, getProp vs getaProp, duplicate keys, common data-structure patterns.
Strings and Chunk ExpressionsChunk addressing (char/word/item/line), the itemDelimiter, chunk mutation, split/search idioms, parsing control-character-delimited network packets.
Parent Scripts and ObjectsParent scripts, child objects, new/rawNew, ancestor-based inheritance, the actorList, timeout objects, patterns from shipped games.
BehaviorsSprite/frame behaviors, getPropertyDescriptionList, instance state, messaging between behaviors, dynamic attachment.
Pitfalls, Debugging, PortingThe ten classic traps, debugging technique, version differences D4-MX2004, porting rules, how to read decompiled Lingo.

Director Concepts

PageCovers
The Director Object ModelThe Player/Movie/Cast/Score/Stage hierarchy, the _movie/_player/_mouse/_key facades, MIAWs, coordinate spaces, score-vs-Lingo authority rules.
Casts and Cast MembersCast libraries, lookup by name and number (and its exact search order), member properties, registration points, runtime member creation.
Score, Stage, and PlaybackChannels and sprite spans, drawing order, markers and navigation, tempo, transitions, palettes, score recording, film loops.
SpritesGeometry and appearance properties, the transform pipeline order, puppeting, sprite names, interaction properties, decompiled-code idioms.
Ink ModesAll ink IDs 0-41 with per-pixel semantics, matte and mask coverage rules, background-transparent keying, blend math, hit-area effects.
Media TypesBitmaps and palettes, imaging Lingo (copyPixels), fields vs text members, shapes, sound and cue points, video, Flash members, film loops, Shockwave 3D.
Memory, Preloading, StreamingThe lazy loading model, purge priorities, preload APIs, Shockwave streaming order, the async network API.

Events & Messaging

PageCovers
Event LifecycleExact startup/per-frame/shutdown event order, updateStage semantics, navigation re-entry, an implementer test checklist.
The Message HierarchyRouting order through primary handlers, behaviors, cast/frame/movie scripts; pass and stopEvent; sendSprite/sendAllSprites/call; dispatcher pseudocode.
Input: Mouse, Keyboard, Hit TestingAll input events, state properties, hit-testing rules by ink and member type, keyboard focus, cursors, text-under-pointer APIs.
Timing, Timers, SynchronizationThe clocks, frame-rate-independent animation, timeout objects, the classic timeout mechanism, idle, cue points, a timing checklist.

API Reference

PageCovers
ObjectsAll 48 documented scripting objects: core, media types, scripting Xtras, 3D, with roles and reference page numbers.
Methods A-ZAll 488 documented methods with Scripting Reference page numbers, plus an annotated table of the most frequently used.
Properties A-ZAll 766 documented properties with page numbers, grouped-by-purpose orientation tables.
Events, Keywords, Operators, ConstantsThe remaining 121 documented names with notes and cross-references.

Native Internals

Original reverse-engineering research into the MX 2004 / Shockwave binaries.

PageCovers
Native Runtime ArchitectureWhat each binary does (Dirapi.dll, Iml32.dll, Proj.dll), the Ghidra methodology, evidence standards, documented failure modes.
Native Lingo InternalsSymbol interning and its ID-allocation quirks, the 169-row API registry, property descriptor records and flag bits, the descriptor executor's branch families, native error codes.
Native Rendering InternalsThe IML32 blit route, the final compositor callback families with exact per-pixel formulas, matte/mask coverage streams, keying rules, the sprite-property-to-compositor bridge.
Native Stage, Input, TimingProjector flag bits, the presentation rect recompute (CenterStage/ResizeStage), window rebinding and channel rebuilds, the input dispatch pipeline, remaining open questions.

Preservation & Emulation

PageCovers
Building a Director-Compatible EngineThe emulation landscape, architecture priorities, ECS mapping rules, implementation traps, an 18-point compatibility test checklist.
XtrasThe plugin system, distribution rules, FileIO and NetLingo, the full recovered Multiuser method table, how to shim Xtras honestly.

Common lookups

QuestionPage
What order do beginSprite and prepareFrame fire in?Event lifecycle
What does ink 36 (Background Transparent) do to pixels?Ink modes, Native rendering
How do I parse chr(1) / chr(2) delimited server packets?Strings and chunks
What is a .dcr or .cct file internally?File formats
Why does my keyDown handler stop the field from typing?Message hierarchy
What is the difference between getProp and getaProp?Lists
Which sprite receives a click when sprites overlap?Input and hit testing
How does sendSprite continue after the target sprite?Message hierarchy
What methods does the Multiuser Xtra export?Xtras
How does native Director map the ink of sprite n to pixels?Native Lingo internals, Native rendering

External resources

The Links & Downloads page carries the full annotated list. The short version:

Agent skill downloads

SkillDownloadContents
Director MX Referencedirector-mx-reference-skill.zipReusable agent skill with a searchable corpus generated from this wiki, all source markdown pages, and a bundled search script.
Lingo Nutshelllingo-nutshell-skill.zipReusable agent skill for interpreting, debugging, and preserving legacy Director Lingo code with a bundled lookup guide and source reference.

Scope

The content here favors what is useful for preservation: exact semantics, ordering rules, native evidence, and working Lingo idioms. Authoring-IDE minutiae and anything that does not affect runtime behavior is left out. Native Internals pages state their evidence level and keep unproven cells marked as research targets rather than fact.