Subscribe via RSS

Disassembling Macromedia Director 5.0

Latest News - September 2017

Update: Thanks to Eugene's comment down below, I've started this little side-project again. We're making damn good progress too!

A lot of work had already been done in the ScummVM project to support Director, unawares to me, but it had recently fallen quiet. Eugene reached out and I'm more than happy to help! Suffice to say that I've already got a lot of D4 demos going... we're a long way off D5 though.

Keep an eye on my source repository here. Currently I'm hacking away to get momentum, but the repo will be cleaned up and made ready in due course.

Next update: I've had commit access for a while, so look towards the Director engine in ScummVM for further updates.

Next update: Progress is slow...

gadget-nearly

Why?.... Macromedia Director (now called 'Adobe Director') 5.0 was built in 1996. It was a great platform for creating multimedia presentations and this, at the time, was used by game developers as an engine to build point-and-click adventures.

One of these games was known as 'Gadget'. Now, Gadget was originally released on a single CD back in 1993, so I assume it was built under Director 3.x, but it was then re-released as a 4-CD package with better audio and visuals. In 2003 the game was also re-mastered for iOS (Apple products), providing a HD version.

Anyway, the game became part of my childhood and, although the actual story-line was very linear, everything about it drew me in. As computers progressed, the ability to run the game became more and more difficult. It got to the point now, with 64-bit operating systems, that the application just wouldn't run. Also there'd be issues with resolutions, as now our monitors are well over 4x larger than the original target screen resolutions.

Therefore my goal was to decode/decipher/disassemble the Director movie format and create an engine to play these movies on all platforms. Something like ScummVM would provide a great basis to build an engine in to and that is currently the end-goal.

How this all started...

This whole concept began because I wanted to play the game and quickly got an "Insufficient memory" error... what? I had 4GB of ram! I assumed the poor application tried to store my amount of available RAM in some tiny variable and potentially got a very negative number. I whipped out the trusty IDA Disassembler and Ollydbg debugger and got to work. Within an hour I had replaced a few bytes in the projector executable to bypass the memory check and the game was running... but it was 640x480 and I knew there was more that could be done.

Director Architecture

Director Movies are created in Macromedia Director which comes in versions for both Macintosh (68k, PPC) and Windows. These are saved as DIR files and are completely self-containing: audio, images, videos, scripts and all the rest of it are embedded in the movies. The user then has the ability to export their movie as a protected DXR or an executable projector. It seems that one can only build a projector for the platform they are working on... you must somehow open your movie in Director on other platforms to create projectors for those systems.

Anatomy of a Director Movie (WORK IN PROGRESS!)

This section will detail the structure of a Director Movie. As work has been progressing it has been noted that the main structure of the movie has stayed backwards-compatible since Director 3.x. I've therefore noted what parts relate to what versions where possible.

Updates

When? What?
10th November 2011 Initial creation of this page for the greater good.
A lot of work had been happening in the background and it was time to tell the world as I knew I could lose all bytes very quickly and thought it would be safer kept online.
January 2017 Work starts again. Keep an eye on the source repository here.

Structure

Below is the known structure of a Director Movie. All start locations and lengths are measured in bytes. Note that there are alpha characters throughout the data... I've replaced known characters with the codes, but also duplicated for sake of padding out the bytes.

Offset/Bytes Explanation
0x00 RR II FF XX 00 00 22 F2 MM VV 99 33 File format: RIFX, File length: 8946 bytes, Movie format: MV93
0x0c ii mm aa pp 00 00 00 18 00 00 00 01
00 00 00 2C 00 00 04 C1 00 00 00 00 00 00 00 00 00 00 00 00
0x2c mm mm aa pp 00 00 03 38 00 18 00 14 00 00 00 28 00 00 00 1A FF FF FF FF FF FF FF FF 00 00 00 0D
RR II FF XX 00 00 22 F2 00 00 00 00 00 01 00 00 00 00 00 00
ii mm aa pp 00 00 00 18 00 00 00 0C 00 01 00 00 1E 90 92 84
mm mm aa pp 00 00 03 38 00 00 00 2C 00 00 00 00 1E 90 91 E4
KK EE YY ** 00 00 00 FC 00 00 03 6C 00 00 00 00 00 00 00 00
VV WW CC FF 00 00 00 50 00 00 04 70 00 00 00 00 00 00 00 00
FF XX mm pp 00 00 19 FF 00 00 04 E8 00 00 00 00 00 00 00 00
MM CC ss LL 00 00 00 3A 00 00 1E F0 00 00 00 00 00 00 00 00
SS oo rr dd 00 00 00 18 00 00 04 C8 00 00 00 00 00 00 00 00
VV WW FF II 00 00 00 77 00 00 22 0E 00 00 00 00 00 00 00 00
VV WW SS CC 00 00 00 2E 00 00 22 8E 00 00 00 00 00 00 00 00
ff rr ee ee 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 0C
ff rr ee ee 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 17
ff rr ee ee 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 0B
ff rr ee ee 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 0A
CC AA SS ** 00 00 00 04 00 00 1F 32 00 00 00 00 00 00 00 00
ff rr ee ee 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 13
FF mm aa pp 00 00 00 4E 00 00 21 72 00 00 00 00 00 00 00 00
CC ii nn ff 00 00 00 3D 00 00 21 C8 00 00 00 00 00 00 00 00
LL cc tt xx 00 00 00 6C 00 00 20 1C 00 00 00 00 00 00 00 00
ff rr ee ee 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 14
ff rr ee ee 00 00 00 00 00 00 00 00 00 0C 00 00 FF FF FF FF
CC AA SS tt 00 00 00 D6 00 00 1F 3E 00 00 00 00 00 00 00 00
SS TT XX TT 00 00 00 2D 00 00 22 C4 00 00 00 00 00 00 00 00
ff rr ee ee 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 0F
LL nn aa mm 00 00 00 22 00 00 21 48 00 00 00 00 00 00 00 00
LL ss cc rr 00 00 00 B0 00 00 20 90 00 00 00 00 00 00 00 00

66 31 66 00 64 00 1E 8F 1E 8D E8 98 00 00
66 31 66 00 64 00 1E 8F 1E 8D E8 90 00 00
66 32 66 66 00 00 1E 8F 1E 8D E8 88 00 00
66 30 00 66 00 00 1E 8F 1E 8D E8 80 00 00
78 31 00 66 00 00 1E 8F 1E 8D E8 78 00 00
64 30 00 66 00 00 1E 8F 1E 8D E9 F0 00 00
78 00 00 66 00 00 1E 8F 1E 8D EA 68 00 00
78 00 00 66 00 00 1E 8F 1E 8D E9 C8 00 00
78 34 00 66 00 00 1E 8F 1E 8D E9 A0 00 00
78 32 00 66 00 00 1E 8F 1E 8D E8 70 00 00
2A 00 00 66 00 00 1E 8F 1E 8D E8 68 00 00
2A 00 00 66 00 00 1E 8F 1E 8D E8 60 00 00
78 00 00 66 00 00 1E 8F 1E 8D F5 28 00 00
64 30 00 66 00 00 1E 8F 1E 8D F5 20 00 00
64 30 00 66 00 00 1E 8F 1E 8D F5 18 00 00
64 30 00 66 00 00 1E 8F 1E 8D F5 10 00 00
64 30 00 66 00 00 1E 8F 1E 8D F5 08 00 00
64 30 00 66 00 00 1E 8F 1E 8D F5 00 00 00
64 30 00 66 00 00 1E 8F 1E 8D F4 F8 00 00
64 30 00 66 00 00 1E 8F 1E 8D F4 F0 00 00

This is the Memory Map of the Movie. It defines the type of each 'member' in the movie, their location in the file, their size and then two DWORDs of other information which I am yet to decode. There is also a large chunk of data at the bottom which I haven't looked into yet. (Although there is a '0x14' in the 'header' and there are 0x14 entries..)
0x370 KK EE YY ** 00 00 00 FC 00 0C 00 0C 00 00 00 14 00 00 00 0B
00 00 00 16 00 00 00 15 SS TT XX TT
00 00 00 0E 00 00 04 00 CC AA SS **
00 00 00 11 00 00 04 00 CC ii nn ff
00 00 00 05 00 00 04 00 FF XX mm pp
00 00 00 10 00 00 04 00 FF mm aa pp
00 00 00 12 00 00 04 00 LL cc tt xx
00 00 00 06 00 00 04 00 MM CC ss LL
00 00 00 07 00 00 04 00 SS oo rr dd
00 00 00 04 00 00 04 00 VV WW CC FF
00 00 00 08 00 00 04 00 VV WW FF II
00 00 00 09 00 00 04 00 VV WW SS CC
00 00 00 0D 00 00 04 00 VV WW tt kk
00 00 00 0D 00 00 04 00 VV WW tt kk
00 00 00 0D 00 00 04 00 VV WW tt kk
00 00 00 0D 00 00 04 00 VV WW tt kk
00 00 00 17 00 00 04 00 cc cc ll

6D 6F 72 79 20 49 6E 73 70 65 63 74
6F 72 0E 54 65 78 74 20 49 6E 73 70
65 63 74 6F 72 0A 4F 6E 69 6F 6E 20
53 6B 69 6E 0D 43 6F 6E 74 72 6F 6C

Here's the actual timeline of the movie. It has two values for each cast member. At the end is a large chunk of random data... it decodes to:

mory InspectorText Inspector
Onion Skin
Control

Which to me looks like the old memory hadn't been cleared and written to disk. The actual offset and length of this member means that this information at the end is just padding.

I've adjusted my code to skip the tuple if the first DWORD is out of bounds of the expected amount of members.

0x47c VV WW CC FF 00 00 00 50 00 50 04 C1
00 90 00 C0 02 70 03 40 00 01 00 01
00 00 00 00 00 00 00 00 00 00 00 00
00 20 00 01 00 00 03 82 04 C1 00 20
00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 0F 00 01 25 6C 00 00 00 3C
CC B7 56 26 00 01 00 00 00 00 04 00
FF FF 00 00
This is a Cast Something? Unknown.
0x4d7 SS oo rr dd 00 00 00 18 1E 92 97 86
00 66 00 00 00 00 00 01 00 00 00 01
00 14 00 04 00 01 00 01
Some form of Sort Ordering?
0x4f7
FF XX mm pp 00 00 19 FF 3B 20 43 6F 70 79 72 69 67 68 74 20 31 39 39 34 2D 31 39 39 36 2C 20 4D 61 63 72 6F 6D 65 64 69 61 2C 20 49 6E 63 2E 20 20 41 6C 6C 20 52 69 67 68 74 73 20 52 65 73 65 72 76 65 64 2E 0D 3B 0D 3B 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 0D 3B 0D 3B 20 44 65 66 61 75 6C 74 20 46 6F 6E 74 20 4D 61 70 70 69 6E 67 20 54 61 62 6C 65 20 66 6F 72 20 44 69 72 65 63 74 6F 72 20 35 2E 30 20 4D 61 63 69 6E 74 6F 73 68 20 61 6E 64 20 57 69 6E 64 6F 77 73 2E 0D 3B 0D 3B 20 54 68 69 73 20 66 69 6C 65 20 70 72 6F 76 69 64 65 73 20 61 20 66 6F 6E 74 20 6D 61 70 70 69 6E 67 20 74 61 62 6C 65 20 66 6F 72 20 44 69 72 65 63 74 6F 72 20 35 2E 30 20 66 6F 72 20 57 69 6E 64 6F 77 73 20 0D 3B 20 61 6E 64 20 4D 61 63 69 6E 74 6F 73 68 2E 0D 3B 0D 3B 20 49 66 20 61 20 63 6F 70 79 20 6F 66 20 74 68 69 73 20 66 69 6C 65 20 69 73 20 69 6E 20 74 68 65 20 73 61 6D 65 20 66 6F 6C 64 65 72 20 6F 72 20 64 69 72 65 63 74 6F 72 79 20 61 73 20 74 68 65 20 0D 3B 20 44 69 72 65 63 74 6F 72 20 61 70 70 6C 69 63 61 74 69 6F 6E 2C 20 44 69 72 65 63 74 6F 72 20 77 69 6C 6C 20 61 75 74 6F 6D 61 74 69 63 61 6C 6C 79 20 69 6E 63 6C 75 64 65 20 74 68 69 73 20 66 6F 6E 74 20 0D 3B 20 6D 61 70 70 69 6E 67 20 74 61 62 6C 65 20 69 6E 20 65 76 65 72 79 20 6E 65 77 20 6D 6F 76 69 65 20 79 6F 75 20 63 72 65 61 74 65 2E 0D 3B 0D 3B 20 54 6F 20 61 64 64 20 74 68 69 73 20 66 6F 6E 74 20 6D 61 70 70 69 6E 67 20 74 61 62 6C 65 20 74 6F 20 61 6E 20 65 78 69 73 74 69 6E 67 20 6D 6F 76 69 65 2C 20 63 68 6F 6F 73 65 20 0D 3B 20 4D 6F 76 69 65 3A 50 72 6F 70 65 72 74 69 65 73 2E 2E 2E 20 66 72 6F 6D 20 74 68 65 20 4D 6F 64 69 66 79 20 6D 65 6E 75 2E 20 20 54 68 65 6E 20 63 6C 69 63 6B 20 4C 6F 61 64 20 66 72 6F 6D 20 46 69 6C 65 2E 20 20 0D 3B 20 55 73 65 20 74 68 65 20 64 69 61 6C 6F 67 20 62 6F 78 20 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6F 20 6C 6F 63 61 74 65 20 74 68 69 73 20 66 69 6C 65 2E 0D 3B 20 0D 3B 20 4E 6F 74 65 3A 20 49 6E 20 74 68 69 73 20 66 69 6C 65 2C 20 61 20 73 65 6D 69 63 6F 6C 6F 6E 20 61 74 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 6F 66 20 61 20 6C 69 6E 65 20 69 6E 64 69 63 61 74 65 73 0D 3B 20 61 20 63 6F 6D 6D 65 6E 74 2E 0D 3B 0D 3B 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 0D 3B 0D 3B 20 46 4F 4E 54 20 4D 41 50 50 49 4E 47 53 20 0D 3B 0D 3B 20 46 6F 6E 74 20 6D 61 70 70 69 6E 67 73 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20 66 6F 6E 74 20 61 6E 64 20 73 69 7A 65 20 73 75 62 73 74 69 74 75 74 69 6F 6E 73 20 74 6F 20 6D 61 6B 65 20 77 68 65 6E 0D 3B 20 6D 6F 76 69 6E 67 20 61 20 6D 6F 76 69 65 20 66 72 6F 6D 20 6F 6E 65 20 70 6C 61 74 66 6F 72 6D 20 74 6F 20 61 6E 6F 74 68 65 72 2E 0D 3B 0D 3B 20 54 68 65 20 66 6F 72 6D 61 74 20 66 6F 72 20 66 6F 6E 74 20 6D 61 70 70 69 6E 67 20 64 65 66 69 6E 69 74 69 6F 6E 73 20 69 73 3A 0D 3B 0D 3B 20 50 6C 61 74 66 6F 72 6D 3A 46 6F 6E 74 4E 61 6D 65 20 3D 3E 20 50 6C 61 74 66 6F 72 6D 3A 46 6F 6E 74 4E 61 6D 65 20 5B 4D 41 50 20 4E 4F 4E 45 5D 20 5B 6F 6C 64 53 69 7A 65 20 3D 3E 20 6E 65 77 53 69 7A 65 5D 0D 3B 0D 3B 20 20 20 20 53 70 65 63 69 66 79 69 6E 67 20 4D 41 50 20 4E 4F 4E 45 20 74 75 72 6E 73 20 6F 66 66 20 63 68 61 72 61 63 74 65 72 20 6D 61 70 70 69 6E 67 20 66 6F 72 20 74 68 69 73 20 66 6F 6E 74 2E 0D 3B 20 20 20 20 49 66 20 79 6F 75 20 73 70 65 63 69 66 79 20 73 69 7A 65 20 6D 61 70 70 69 6E 67 73 2C 20 74 68 65 79 20 61 70 70 6C 79 20 66 6F 72 20 54 48 41 54 20 46 4F 4E 54 20 4F 4E 4C 59 2E 0D 3B 0D 3B 20 48 65 72 65 20 61 72 65 20 73 6F 6D 65 20 74 79 70 69 63 61 6C 20 6D 61 70 70 69 6E 67 73 20 66 6F 72 20 74 68 65 20 73 74 61 6E 64 61 72 64 20 4D 61 63 69 6E 74 6F 73 68 20 66 6F 6E 74 73 3A 0D 3B 0D 0D 4D 61 63 3A 43 68 69 63 61 67 6F 20 20 20 20 20 20 20 3D 3E 20 57 69 6E 3A 53 79 73 74 65 6D 0D 4D 61 63 3A 43 6F 75 72 69 65 72 20 20 20 20 20 20 20 3D 3E 20 57 69 6E 3A 22 43 6F 75 72 69 65 72 20 4E 65 77 22 0D 4D 61 63 3A 47 65 6E 65 76 61 20 20 20 20 20 20 20 20 3D 3E 20 57 69 6E 3A 22 4D 53 20 53 61 6E 73 20 53 65 72 69 66 22 0D 4D 61 63 3A 48 65 6C 76 65 74 69 63 61 20 20 20 20 20 3D 3E 20 57 69 6E 3A 41 72 69 61 6C 0D 4D 61 63 3A 4D 6F 6E 61 63 6F 20 20 20 20 20 20 20 20 3D 3E 20 57 69 6E 3A 54 65 72 6D 69 6E 61 6C 0D 4D 61 63 3A 22 4E 65 77 20 59 6F 72 6B 22 20 20 20 20 3D 3E 20 57 69 6E 3A 22 4D 53 20 53 65 72 69 66 22 0D 4D 61 63 3A 53 79 6D 62 6F 6C 20 20 20 20 20 20 20 20 3D 3E 20 57 69 6E 3A 53 79 6D 62 6F 6C 20 20 4D 61 70 20 4E 6F 6E 65 0D 4D 61 63 3A 54 69 6D 65 73 20 20 20 20 20 20 20 20 20 3D 3E 20 57 69 6E 3A 22 54 69 6D 65 73 20 4E 65 77 20 52 6F 6D 61 6E 22 20 31 34 3D 3E 31 32 20 31 38 3D 3E 31 34 20 32 34 3D 3E 31 38 20 33 30 3D 3E 32 34 0D 0D 3B 0D 3B 20 48 65 72 65 20 61 72 65 20 73 6F 6D 65 20 74 79 70 69 63 61 6C 20 6D 61 70 70 69 6E 67 73 20 66 6F 72 20 74 68 65 20 73 74 61 6E 64 61 72 64 20 57 69 6E 64 6F 77 73 20 66 6F 6E 74 73 3A 0D 3B 0D 0D 57 69 6E 3A 41 72 69 61 6C 20 20 20 20 20 20 20 20 20 20 20 20 20 3D 3E 20 4D 61 63 3A 48 65 6C 76 65 74 69 63 61 0D 57 69 6E 3A 22 43 6F 75 72 69 65 72 22 20 20 20 20 20 20 20 20 20 3D 3E 20 4D 61 63 3A 43 6F 75 72 69 65 72 0D 57 69 6E 3A 22 43 6F 75 72 69 65 72 20 4E 65 77 22 20 20 20 20 20 3D 3E 20 4D 61 63 3A 43 6F 75 72 69 65 72 0D 57 69 6E 3A 22 4D 53 20 53 65 72 69 66 22 20 20 20 20 20 20 20 20 3D 3E 20 4D 61 63 3A 22 4E 65 77 20 59 6F 72 6B 22 0D 57 69 6E 3A 22 4D 53 20 53 61 6E 73 20 53 65 72 69 66 22 20 20 20 3D 3E 20 4D 61 63 3A 47 65 6E 65 76 61 0D 57 69 6E 3A 53 79 6D 62 6F 6C 20 20 20 20 20 20 20 20 20 20 20 20 3D 3E 20 4D 61 63 3A 53 79 6D 62 6F 6C 20 20 4D 61 70 20 4E 6F 6E 65 0D 57 69 6E 3A 53 79 73 74 65 6D 20 20 20 20 20 20 20 20 20 20 20 20 3D 3E 20 4D 61 63 3A 43 68 69 63 61 67 6F 0D 57 69 6E 3A 54 65 72 6D 69 6E 61 6C 20 20 20 20 20 20 20 20 20 20 3D 3E 20 4D 61 63 3A 4D 6F 6E 61 63 6F 0D 57 69 6E 3A 22 54 69 6D 65 73 20 4E 65 77 20 52 6F 6D 61 6E 22 20 3D 3E 20 4D 61 63 3A 22 54 69 6D 65 73 22 20 31 32 3D 3E 31 34 20 31 34 3D 3E 31 38 20 31 38 3D 3E 32 34 20 32 34 3D 3E 33 30 0D 0D 3B 20 4E 6F 74 65 3A 20 57 68 65 6E 20 6D 61 70 70 69 6E 67 20 66 72 6F 6D 20 57 69 6E 64 6F 77 73 20 74 6F 20 4D 61 63 69 6E 74 6F 73 68 2C 20 43 6F 75 72 69 65 72 20 61 6E 64 20 43 6F 75 72 69 65 72 20 4E 65 77 20 0D 3B 20 6D 61 70 20 6F 6E 74 6F 20 43 6F 75 72 69 65 72 2E 20 20 57 68 65 6E 20 63 6F 6D 69 6E 67 20 62 61 63 6B 20 74 6F 20 57 69 6E 64 6F 77 73 20 6F 6E 6C 79 20 43 6F 75 72 69 65 72 20 4E 65 77 0D 3B 20 77 69 6C 6C 20 62 65 20 75 73 65 64 2E 0D 0D 3B 20 4A 61 70 61 6E 65 73 65 20 46 6F 6E 74 20 4D 61 70 70 69 6E 67 73 0D 3B 20 0D 3B 20 54 68 65 20 4D 61 63 69 6E 74 6F 73 68 20 4A 61 70 61 6E 65 73 65 20 4F 73 61 6B 61 20 66 6F 6E 74 20 69 73 20 6D 61 70 70 65 64 20 74 6F 20 61 20 57 69 6E 64 6F 77 73 20 66 6F 6E 74 2C 20 61 6E 64 20 0D 3B 20 61 6C 6C 20 57 69 6E 64 6F 77 73 20 66 6F 6E 74 73 20 61 72 65 20 6D 61 70 70 65 64 20 74 6F 20 4D 61 63 69 6E 74 6F 73 68 27 73 20 4F 73 61 6B 61 2E 20 20 4D 61 70 20 4E 6F 6E 65 20 69 73 20 75 73 65 64 0D 3B 20 62 65 63 61 75 73 65 20 6F 6E 6C 79 20 52 6F 6D 61 6E 20 66 6F 6E 74 73 20 6E 65 65 64 20 75 70 70 65 72 2D 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 6D 61 70 70 65 64 2E 20 20 54 6F 20 70 72 65 76 65 6E 74 20 0D 3B 20 6D 61 70 70 69 6E 67 20 6F 66 20 61 6E 79 20 61 64 64 69 74 69 6F 6E 61 6C 20 4A 61 70 61 6E 65 73 65 20 66 6F 6E 74 73 2C 20 61 64 64 20 74 68 65 6D 20 74 6F 20 74 68 69 73 20 6C 69 73 74 2E 0D 3B 0D 3B 20 4E 6F 74 65 3A 20 49 66 20 79 6F 75 20 64 6F 20 6E 6F 74 20 68 61 76 65 20 61 20 4A 61 70 61 6E 65 73 65 20 73 79 73 74 65 6D 2C 20 74 68 65 20 66 6F 6E 74 20 6E 61 6D 65 73 20 62 65 6C 6F 77 20 0D 3B 20 77 69 6C 6C 20 61 70 70 65 61 72 20 74 6F 20 62 65 20 75 6E 72 65 61 64 61 62 6C 65 2E 0D 0D 4D 61 63 3A 4F 73 61 6B 61 3D 3E 57 69 6E 3A 22 95 57 8F 80 83 53 83 56 83 62 83 4E 22 20 4D 61 70 20 4E 6F 6E 65 0D 0D 57 69 6E 3A 22 82 6C 82 72 20 83 53 83 56 83 62 83 4E 22 3D 3E 4D 61 63 3A 4F 73 61 6B 61 20 4D 61 70 20 4E 6F 6E 65 0D 57 69 6E 3A 22 82 6C 82 72 20 96 BE 92 A9 22 3D 3E 4D 61 63 3A 4F 73 61 6B 61 20 4D 61 70 20 4E 6F 6E 65 0D 57 69 6E 3A 22 95 57 8F 80 83 53 83 56 83 62 83 4E 22 3D 3E 4D 61 63 3A 4F 73 61 6B 61 20 4D 61 70 20 4E 6F 6E 65 0D 57 69 6E 3A 22 95 57 8F 80 96 BE 92 A9 22 3D 3E 4D 61 63 3A 4F 73 61 6B 61 20 4D 61 70 20 4E 6F 6E 65 0D 57 69 6E 3A 22 96 BE 92 A9 22 3D 3E 4D 61 63 3A 4F 73 61 6B 61 20 4D 61 70 20 4E 6F 6E 65 0D 0D 3B 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 0D 3B 0D 3B 20 43 48 41 52 41 43 54 45 52 20 4D 41 50 50 49 4E 47 53 0D 3B 0D 3B 20 43 68 61 72 61 63 74 65 72 20 6D 61 70 70 69 6E 67 20 65 6E 73 75 72 65 73 20 74 68 61 74 20 63 68 61 72 61 63 74 65 72 73 20 73 75 63 68 20 61 73 20 62 75 6C 6C 65 74 73 2C 20 0D 3B 20 71 75 6F 74 65 20 6D 61 72 6B 73 2C 20 61 6E 64 20 61 63 63 65 6E 74 65 64 20 63 68 61 72 61 63 74 65 72 73 20 61 6C 77 61 79 73 20 61 70 70 65 61 72 20 63 6F 72 72 65 63 74 6C 79 20 0D 3B 20 77 68 65 6E 20 74 65 78 74 20 69 73 20 6D 6F 76 65 64 20 66 72 6F 6D 20 6F 6E 65 20 70 6C 61 74 66 6F 72 6D 20 74 6F 20 61 6E 6F 74 68 65 72 2E 20 20 57 68 65 6E 20 61 20 0D 3B 20 63 68 61 72 61 63 74 65 72 20 69 73 20 6D 61 70 70 65 64 2C 20 61 20 64 69 66 66 65 72 65 6E 74 20 41 53 43 49 49 20 76 61 6C 75 65 20 69 73 20 73 75 62 73 74 69 74 75 74 65 64 20 0D 3B 20 69 6E 20 6F 72 64 65 72 20 74 6F 20 70 72 65 73 65 72 76 65 20 74 68 65 20 61 70 70 65 61 72 61 6E 63 65 20 6F 66 20 74 68 65 20 63 68 61 72 61 63 74 65 72 2E 20 20 0D 3B 0D 3B 20 43 68 61 72 61 63 74 65 72 20 6D 61 70 70 69 6E 67 73 20 61 72 65 20 75 73 65 64 20 66 6F 72 20 61 6C 6C 20 66 6F 6E 74 73 20 45 58 43 45 50 54 20 74 68 6F 73 65 20 64 65 63 6C 61 72 65 64 20 0D 3B 20 61 62 6F 76 65 20 61 73 20 4D 61 70 20 4E 6F 6E 65 2E 20 20 0D 3B 0D 3B 20 54 68 65 20 66 6F 72 6D 61 74 20 66 6F 72 20 63 68 61 72 61 63 74 65 72 20 6D 61 70 70 69 6E 67 73 20 69 73 3A 0D 3B 0D 3B 20 50 6C 61 74 66 6F 72 6D 3A 20 3D 3E 20 50 6C 61 74 66 6F 72 6D 3A 20 20 6F 6C 64 43 68 61 72 20 3D 3E 20 6F 6C 64 43 68 61 72 20 2E 2E 2E 0D 3B 0D 3B 20 54 68 65 20 66 6F 6C 6C 6F 77 69 6E 67 20 74 61 62 6C 65 20 70 72 6F 76 69 64 65 73 20 61 20 66 75 6C 6C 20 73 65 74 20 6F 66 20 62 69 2D 64 69 72 65 63 74 69 6F 6E 61 6C 20 0D 3B 20 6D 61 70 70 69 6E 67 73 20 66 6F 72 20 61 6C 6C 20 41 53 43 49 49 20 76 61 6C 75 65 73 20 62 65 74 77 65 65 6E 20 31 32 38 20 61 6E 64 20 32 35 35 2E 0D 3B 0D 3B 20 4E 6F 74 65 3A 20 53 6F 6D 65 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20 6E 6F 74 20 61 76 61 69 6C 61 62 6C 65 20 69 6E 20 62 6F 74 68 20 63 68 61 72 61 63 74 65 72 20 73 65 74 73 2E 20 0D 3B 20 48 6F 77 65 76 65 72 2C 20 74 68 65 20 62 69 2D 64 69 72 65 63 74 69 6F 6E 61 6C 20 6D 61 70 70 69 6E 67 20 74 61 62 6C 65 20 62 65 6C 6F 77 20 70 72 65 73 65 72 76 65 73 20 74 68 65 73 65 20 0D 3B 20 63 68 61 72 61 63 74 65 72 73 20 65 76 65 6E 20 69 66 20 74 68 65 79 20 61 72 65 20 6D 61 70 70 65 64 20 74 6F 20 61 20 64 69 66 66 65 72 65 6E 74 20 70 6C 61 74 66 6F 72 6D 20 61 6E 64 20 0D 3B 20 6C 61 74 65 72 20 72 65 2D 6D 61 70 70 65 64 20 62 61 63 6B 20 74 6F 20 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 70 6C 61 74 66 6F 72 6D 2E 0D 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 31 32 38 3D 3E 31 39 36 20 31 32 39 3D 3E 31 39 37 20 31 33 30 3D 3E 31 39 39 20 31 33 31 3D 3E 32 30 31 20 31 33 32 3D 3E 32 30 39 20 31 33 33 3D 3E 32 31 34 20 31 33 34 3D 3E 32 32 30 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 31 33 35 3D 3E 32 32 35 20 31 33 36 3D 3E 32 32 34 20 31 33 37 3D 3E 32 32 36 20 31 33 38 3D 3E 32 32 38 20 31 33 39 3D 3E 32 32 37 20 31 34 30 3D 3E 32 32 39 20 31 34 31 3D 3E 32 33 31 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 31 34 32 3D 3E 32 33 33 20 31 34 33 3D 3E 32 33 32 20 31 34 34 3D 3E 32 33 34 20 31 34 35 3D 3E 32 33 35 20 31 34 36 3D 3E 32 33 37 20 31 34 37 3D 3E 32 33 36 20 31 34 38 3D 3E 32 33 38 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 31 34 39 3D 3E 32 33 39 20 31 35 30 3D 3E 32 34 31 20 31 35 31 3D 3E 32 34 33 20 31 35 32 3D 3E 32 34 32 20 31 35 33 3D 3E 32 34 34 20 31 35 34 3D 3E 32 34 36 20 31 35 35 3D 3E 32 34 35 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 31 35 36 3D 3E 32 35 30 20 31 35 37 3D 3E 32 34 39 20 31 35 38 3D 3E 32 35 31 20 31 35 39 3D 3E 32 35 32 20 31 36 30 3D 3E 31 33 34 20 31 36 31 3D 3E 31 37 36 20 31 36 32 3D 3E 31 36 32 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 31 36 33 3D 3E 31 36 33 20 31 36 34 3D 3E 31 36 37 20 31 36 35 3D 3E 31 34 39 20 31 36 36 3D 3E 31 38 32 20 31 36 37 3D 3E 32 32 33 20 31 36 38 3D 3E 31 37 34 20 31 36 39 3D 3E 31 36 39 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 31 37 30 3D 3E 31 35 33 20 31 37 31 3D 3E 31 38 30 20 31 37 32 3D 3E 31 36 38 20 31 37 33 3D 3E 31 34 31 20 31 37 34 3D 3E 31 39 38 20 31 37 35 3D 3E 32 31 36 20 31 37 36 3D 3E 31 34 34 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 31 37 37 3D 3E 31 37 37 20 31 37 38 3D 3E 31 34 33 20 31 37 39 3D 3E 31 34 32 20 31 38 30 3D 3E 31 36 35 20 31 38 31 3D 3E 31 38 31 20 31 38 32 3D 3E 32 34 30 20 31 38 33 3D 3E 32 32 31 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 31 38 34 3D 3E 32 32 32 20 31 38 35 3D 3E 32 35 34 20 31 38 36 3D 3E 31 33 38 20 31 38 37 3D 3E 31 37 30 20 31 38 38 3D 3E 31 38 36 20 31 38 39 3D 3E 32 35 33 20 31 39 30 3D 3E 32 33 30 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 31 39 31 3D 3E 32 34 38 20 31 39 32 3D 3E 31 39 31 20 31 39 33 3D 3E 31 36 31 20 31 39 34 3D 3E 31 37 32 20 31 39 35 3D 3E 31 37 35 20 31 39 36 3D 3E 31 33 31 20 31 39 37 3D 3E 31 38 38 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 31 39 38 3D 3E 32 30 38 20 31 39 39 3D 3E 31 37 31 20 32 30 30 3D 3E 31 38 37 20 32 30 31 3D 3E 31 33 33 20 32 30 32 3D 3E 31 36 30 20 32 30 33 3D 3E 31 39 32 20 32 30 34 3D 3E 31 39 35 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 32 30 35 3D 3E 32 31 33 20 32 30 36 3D 3E 31 34 30 20 32 30 37 3D 3E 31 35 36 20 32 30 38 3D 3E 31 37 33 20 32 30 39 3D 3E 31 35 31 20 32 31 30 3D 3E 31 34 37 20 32 31 31 3D 3E 31 34 38 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 32 31 32 3D 3E 31 34 35 20 32 31 33 3D 3E 31 34 36 20 32 31 34 3D 3E 32 34 37 20 32 31 35 3D 3E 32 31 35 20 32 31 36 3D 3E 32 35 35 20 32 31 37 3D 3E 31 35 39 20 32 31 38 3D 3E 31 35 38 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 32 31 39 3D 3E 31 36 34 20 32 32 30 3D 3E 31 33 39 20 32 32 31 3D 3E 31 35 35 20 32 32 32 3D 3E 31 32 38 20 32 32 33 3D 3E 31 32 39 20 32 32 34 3D 3E 31 33 35 20 32 32 35 3D 3E 31 38 33 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 32 32 36 3D 3E 31 33 30 20 32 32 37 3D 3E 31 33 32 20 32 32 38 3D 3E 31 33 37 20 32 32 39 3D 3E 31 39 34 20 32 33 30 3D 3E 32 30 32 20 32 33 31 3D 3E 31 39 33 20 32 33 32 3D 3E 32 30 33 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 32 33 33 3D 3E 32 30 30 20 32 33 34 3D 3E 32 30 35 20 32 33 35 3D 3E 32 30 36 20 32 33 36 3D 3E 32 30 37 20 32 33 37 3D 3E 32 30 34 20 32 33 38 3D 3E 32 31 31 20 32 33 39 3D 3E 32 31 32 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 32 34 30 3D 3E 31 35 37 20 32 34 31 3D 3E 32 31 30 20 32 34 32 3D 3E 32 31 38 20 32 34 33 3D 3E 32 31 39 20 32 34 34 3D 3E 32 31 37 20 32 34 35 3D 3E 31 36 36 20 32 34 36 3D 3E 31 33 36 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 32 34 37 3D 3E 31 35 32 20 32 34 38 3D 3E 31 35 30 20 32 34 39 3D 3E 31 35 34 20 32 35 30 3D 3E 31 37 38 20 32 35 31 3D 3E 31 39 30 20 32 35 32 3D 3E 31 38 34 20 32 35 33 3D 3E 31 38 39 20 0D 4D 61 63 3A 20 3D 3E 20 57 69 6E 3A 20 32 35 34 3D 3E 31 37 39 20 32 35 35 3D 3E 31 38 35 20 0D 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 31 32 38 3D 3E 32 32 32 20 31 32 39 3D 3E 32 32 33 20 31 33 30 3D 3E 32 32 36 20 31 33 31 3D 3E 31 39 36 20 31 33 32 3D 3E 32 32 37 20 31 33 33 3D 3E 32 30 31 20 31 33 34 3D 3E 31 36 30 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 31 33 35 3D 3E 32 32 34 20 31 33 36 3D 3E 32 34 36 20 31 33 37 3D 3E 32 32 38 20 31 33 38 3D 3E 31 38 36 20 31 33 39 3D 3E 32 32 30 20 31 34 30 3D 3E 32 30 36 20 31 34 31 3D 3E 31 37 33 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 31 34 32 3D 3E 31 37 39 20 31 34 33 3D 3E 31 37 38 20 31 34 34 3D 3E 31 37 36 20 31 34 35 3D 3E 32 31 32 20 31 34 36 3D 3E 32 31 33 20 31 34 37 3D 3E 32 31 30 20 31 34 38 3D 3E 32 31 31 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 31 34 39 3D 3E 31 36 35 20 31 35 30 3D 3E 32 34 38 20 31 35 31 3D 3E 32 30 39 20 31 35 32 3D 3E 32 34 37 20 31 35 33 3D 3E 31 37 30 20 31 35 34 3D 3E 32 34 39 20 31 35 35 3D 3E 32 32 31 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 31 35 36 3D 3E 32 30 37 20 31 35 37 3D 3E 32 34 30 20 31 35 38 3D 3E 32 31 38 20 31 35 39 3D 3E 32 31 37 20 31 36 30 3D 3E 32 30 32 20 31 36 31 3D 3E 31 39 33 20 31 36 32 3D 3E 31 36 32 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 31 36 33 3D 3E 31 36 33 20 31 36 34 3D 3E 32 31 39 20 31 36 35 3D 3E 31 38 30 20 31 36 36 3D 3E 32 34 35 20 31 36 37 3D 3E 31 36 34 20 31 36 38 3D 3E 31 37 32 20 31 36 39 3D 3E 31 36 39 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 31 37 30 3D 3E 31 38 37 20 31 37 31 3D 3E 31 39 39 20 31 37 32 3D 3E 31 39 34 20 31 37 33 3D 3E 32 30 38 20 31 37 34 3D 3E 31 36 38 20 31 37 35 3D 3E 31 39 35 20 31 37 36 3D 3E 31 36 31 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 31 37 37 3D 3E 31 37 37 20 31 37 38 3D 3E 32 35 30 20 31 37 39 3D 3E 32 35 34 20 31 38 30 3D 3E 31 37 31 20 31 38 31 3D 3E 31 38 31 20 31 38 32 3D 3E 31 36 36 20 31 38 33 3D 3E 32 32 35 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 31 38 34 3D 3E 32 35 32 20 31 38 35 3D 3E 32 35 35 20 31 38 36 3D 3E 31 38 38 20 31 38 37 3D 3E 32 30 30 20 31 38 38 3D 3E 31 39 37 20 31 38 39 3D 3E 32 35 33 20 31 39 30 3D 3E 32 35 31 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 31 39 31 3D 3E 31 39 32 20 31 39 32 3D 3E 32 30 33 20 31 39 33 3D 3E 32 33 31 20 31 39 34 3D 3E 32 32 39 20 31 39 35 3D 3E 32 30 34 20 31 39 36 3D 3E 31 32 38 20 31 39 37 3D 3E 31 32 39 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 31 39 38 3D 3E 31 37 34 20 31 39 39 3D 3E 31 33 30 20 32 30 30 3D 3E 32 33 33 20 32 30 31 3D 3E 31 33 31 20 32 30 32 3D 3E 32 33 30 20 32 30 33 3D 3E 32 33 32 20 32 30 34 3D 3E 32 33 37 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 32 30 35 3D 3E 32 33 34 20 32 30 36 3D 3E 32 33 35 20 32 30 37 3D 3E 32 33 36 20 32 30 38 3D 3E 31 39 38 20 32 30 39 3D 3E 31 33 32 20 32 31 30 3D 3E 32 34 31 20 32 31 31 3D 3E 32 33 38 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 32 31 32 3D 3E 32 33 39 20 32 31 33 3D 3E 32 30 35 20 32 31 34 3D 3E 31 33 33 20 32 31 35 3D 3E 32 31 35 20 32 31 36 3D 3E 31 37 35 20 32 31 37 3D 3E 32 34 34 20 32 31 38 3D 3E 32 34 32 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 32 31 39 3D 3E 32 34 33 20 32 32 30 3D 3E 31 33 34 20 32 32 31 3D 3E 31 38 33 20 32 32 32 3D 3E 31 38 34 20 32 32 33 3D 3E 31 36 37 20 32 32 34 3D 3E 31 33 36 20 32 32 35 3D 3E 31 33 35 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 32 32 36 3D 3E 31 33 37 20 32 32 37 3D 3E 31 33 39 20 32 32 38 3D 3E 31 33 38 20 32 32 39 3D 3E 31 34 30 20 32 33 30 3D 3E 31 39 30 20 32 33 31 3D 3E 31 34 31 20 32 33 32 3D 3E 31 34 33 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 32 33 33 3D 3E 31 34 32 20 32 33 34 3D 3E 31 34 34 20 32 33 35 3D 3E 31 34 35 20 32 33 36 3D 3E 31 34 37 20 32 33 37 3D 3E 31 34 36 20 32 33 38 3D 3E 31 34 38 20 32 33 39 3D 3E 31 34 39 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 32 34 30 3D 3E 31 38 32 20 32 34 31 3D 3E 31 35 30 20 32 34 32 3D 3E 31 35 32 20 32 34 33 3D 3E 31 35 31 20 32 34 34 3D 3E 31 35 33 20 32 34 35 3D 3E 31 35 35 20 32 34 36 3D 3E 31 35 34 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 32 34 37 3D 3E 32 31 34 20 32 34 38 3D 3E 31 39 31 20 32 34 39 3D 3E 31 35 37 20 32 35 30 3D 3E 31 35 36 20 32 35 31 3D 3E 31 35 38 20 32 35 32 3D 3E 31 35 39 20 32 35 33 3D 3E 31 38 39 20 0D 57 69 6E 3A 20 3D 3E 20 4D 61 63 3A 20 32 35 34 3D 3E 31 38 35 20 32 35 35 3D 3E 32 31 36 20 0D 0D 00
Font Mapping... this is all ASCII... feel free to slap it into a converter to read it.
0x1eff MM CC ss LL 00 00 00 3A 00 00 00 0C 00 00 00 01 00
0x1f41 CC AA SS ** 00 00 00 04 00 00 00 15 This just lists DWORDs of cast members... here there is only one, Cast member 0x15
0x1f4d CC AA SS tt 00 00 00 D6 00 00 00 07
00 00 00 AC 00 00 00 1E 00 00 00 14 1E 90 93 06
00 00 00 00 00 00 00 00 00 00 00 01 00 0E 00 00
00 00 00 00 00 28 00 00 00 28 00 00 00 28 00 00
00 28 00 00 00 28 00 00 00 3C 00 00 00 52 00 00
00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00
00 52 00 00 00 52 00 00

00 5A
6F 6E 20 6D 6F 75 73 65 55 70 0D 20 20 61 6C 65
72 74 20 22 4D 79 20 46 69 72 73 74 20 50 6F 70
75 70 21 22 0D 65 6E 64 00 EB 01 1E 01 E5 02 C2

00 00 00 24 00 00 00 24 06 00 00 00
00 01 00 00 00 00 00 0B 00 09 00 04
00 00 00 09 00 00 00 00 00 00 00 40
00 00 00 61 02 58 00 00 00 00 00 01
FF FF FF FF FF FF

00 00 00 00 00 A6 00 0B 01 1D 00 0B
00 00 00 0B 00 01

This is cast member 0x15 ... it's a button, I created it... the button has the lingo script as follows:

on mouseUp
alert "My First Popup!"
end

which happens to be embedded in the bytes above

0x202b LL cc tt xx 00 00 00 6C 1E 91 59 B2 CA F5 00 00 00 00 00 01 00 00 00 01 00 60 00 0C 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 18 00 01 00 05 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1E 90 93 06 00 00 00 19 00 04 FF FF
0x209f LL ss cc rr 00 00 00 B0 1E 8F 13 B4 00 00 00 01 00 00 00 B0 00 00 00 B0 00 5C 00 00 00 01 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 01 FF FF 00 02 00 00 00 AC 00 00 00 02 00 00 00 00 00 66 00 00 00 00 00 66 00 01 00 00 00 66 00 01 00 00 00 90 00 00 00 14 00 00 00 98 44 00 42 01 57 01 01 00 06 00 00 00 00 01 00 00 00 07 00 00 00 5C 00 00 00 00 00 64 00 00 00 00 00 64 00 00 00 00 00 64 00 00 00 0A 00 01 00 01 00 00 00 64 00 00 00 01 00 00 00 00 00 00 00 10 4D 79 20 46 69 72 73 74 20 50 6F 70 75 70 21 00 FF FF 00 00
0x2157 LL nn aa mm 00 00 00 22 1E 92 9A 36 1E 90 92 AC
00 00 00 22 00 00 00 22 00 14
00 02
07 6D 6F 75 73 65 55 70
05 61 6C 65 72 74
Lingo Names? Function Names? The "00 02" is the quantity of strings to follow. Each string starts with the length, then the ASCII Characters. This example contains:

mouseUp
alert

...these happen to be the functions I am using in my test movie.

0x2181 FF mm aa pp 00 00 00 4E 00 00 00 24 00 00 00 22 1E 90 64 26 00 00 00 00 00 00 00 01 00 00 00 01 00 1C 00 08 1E 90 92 02 1E 8D FD 00 00 00 00 12 00 01 00 04 1E 90 64 26 00 79 00 03 00 00 00 1E 00 00 00 22 00 12 00 00 00 06 4D 6F 6E 61 63 6F 00 13 00 00 00 00
0x21d7 CC ii nn ff 00 00 00 3D 00 00 00 04
00 04 00 00 00 00 00 00 00 00 00 00
00 0C 00 00 00 0C 00 00 00 23 00 02
00 01 00 03 00 01 00 00
00 01
15 4D 61 69 6E 48 44 3A 44 65 73 6B 74 6F 70 20 46 6F 6C 64 65 72 00 20
Cast Info? The "00 01" dictates the number of strings following and this particular one contains:

MainHD:Desktop Folder

..which is the last location this movie had been saved.

0x221d VV WW FF II 00 00 00 77 00 00 00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 12 00 00 00 24 00 00 00 3B 00 00 00 3D 00 00 00 3D 00 00 00 3D 00 00 00 3D 10 53 74 65 76 65 6E 20 48 6F 65 66 65 6C 20 2D 20 00 10 53 74 65 76 65 6E 20 48 6F 65 66 65 6C 20 2D 20 00 15 4D 61 69 6E 48 44 3A 44 65 73 6B 74 6F 70 20 46 6F 6C 64 65 72 00 00 00 42
0x229d VV WW SS CC 00 00 00 2E 00 00 00 2E 00 00 00 14 00 00 00 00 00 07 00 18 00 32 01 00 00 1A 00 06 00 30 10 00 00 01 00 01 00 0A 00 3A FF 00 00 B4 01 04 00 0F 00 78
0x22d3 SS TT XX TT 00 00 00 2D 00 00 00 0C 00 00 00 0B 00 00 00 16 54 65 73 74 20 42 61 77 74 6F 6E 00 01 00 00 00 00 00 0B 00 09 00 04 00 00 00 09 00 00 00 00 00 00

The fun stuff: Emulation

Knowing what it is that you are actually disassembling helps massively when digging through bytes. The issue at hand was obtaining and then running the older versions of Macromedia Director. Fortunately there are some great minds around the internet who have decided to catalog and provide ancient versions of software. Some greater minds have then created emulators to faithfully reproduce hardware on different operating systems. Below I'll detail how I got specific versions of Director to run under their required operating systems.

Macromedia Director 5.0 (PowerPC) on Sheepshaver

Finding v5.0 for any platform was difficult. I found a user offering everything but the box on the Amibay.com Forums, but due to a slow response opted to purchase the application from a seller in the USA. He was to take a while for shipping, so he was kind enough to ISO it for me and I had it in a few hours! Running the software on Sheepshaver was simple enough... I actually have the original CDs for Mac OS 8 and the 8.5 upgrade. After configuring shared folders I was creating projectors and debugging them in my .NET application.

Installing ScaryInstallationWarning DirectorFunctionalWithBasicDXR

I then mucked around with other random PPC software... It was such a cool platform back in the day... when I couldn't afford it!

Macromedia Director 4.0 on Windows 2000

I am still looking for v5.0 for Windows, but haven't had any luck yet. I therefore settled for obtaining v4.0 from Vetusware and got it running under Windows 2000. I initially wanted to run it under Windows 95 or 98 but Virtual Box doesn't have 'host tools' for those operating systems. Fortunately the application runs fine under Windows 2000.

Director4-Intro Director4

Macromedia Director 4.0/5.0/6.0 on Windows 98

Turns out that Virtual Box does indeed support Windows 98 (here's a great tutorial!). After finding my 98SE CD, I proceeded to install it and then install Director from the ISOs provided in the comments. All went well and I started creating more projectors for debugging. Note that Windows 98 hangs for ages on startup... doing network stuff I think. You'll also need the Scitech Display Doctor (as per the information in the link prior) to get a good resolution.

Win98SE-3 Win98SE-1 Win98SE-2
Win98SE-5 Win98SE-4

Macromedia Player 4.0 and 6.0A on Acorn RISC OS

This was nothing short of fun... I accidently came across an ISO containing these versions after googling over and over for v5.0 on Windows. I had used Acorn machines back in Primary school and vaguely remembered their hideous GUI. I instantly searched for emulators and found that there were quite a few available! In the end I had no idea what versions of what OS to use, so I just downloaded the first things I came across. This included the RPCEmu 'Spoon Edition', a hard disk image by the name of Lion's RISC OS Archive and then the ISO that included the software.

After dragging and dropping all the files in the correct locations I came up with a working Acorn 3.7 system!

Acorn-Desktop Acorn-Director Acorn-Director-2

It ended up doing nothing useful... the emulation wasn't capable of running the actual movies... but it was fun to work on. I then found a newer OS to put on the machine. It turns out that the Acorn just ran RISC OS on proprietary hardware; I assumed they actually built their own operating system. In the years between Acorn and 1999 RISC OS Open was founded and they have continued the OS development as open source. You can find a guide to install it all here. I didn't pursue it...

Update: I ended up downloading RISC OS Virtually Free (4.02 ROM Image) and, after following the somewhat tricky instructions, had a newer OS running in RPCEmu. This then allowed the random XMAS movie to play with full sound.

acorn-riscos-4 Acorn-Proper-Install Acorn-Movie-Running
Acorn-Movie-Running-2 Acorn-Movie-Running-3

The file format for the movies was the same as what I had seen on Macintosh and Windows, but all attempts to drop in movies that I'd created elsewhere failed. Either way, that was enough screwing around.. I needed to get back to the actual decoding.

Comments (20) Trackbacks (0)
  1. Hi, great article! I was wondering if you would be willing to share the v5.0 for PowerPC, I’ve found myself in a very similar situation to you and want to see if I can emulate the software on my Mac to restore an old presentation.

    thanks so much!

  2. Hi,
    Thank you for this very interesting article !
    But it seems that you removed download links.
    Sad…

  3. I actually just got a copy of Macromedia Director 5.0 for Windows off of eBay, along with an upgrade version of Director 6 (also for Windows). I can make ISO images of them for you if you want.

  4. Hello there:
    I have the window version (v4.0, 7.0 – 11.5), and I am looking for the Mac version 4 or 5. Is anybody willing to trade it?

  5. Hey, we at ScummVM started work on Director. Could you please drop me a mail?

  6. cool to see interest in this has been renewed. Best of luck! I will continue with my efforts as well!

  7. Hi, thanks for your blog. It provided me with a little of background to create a simple python script to extract images and sounds from director Dxr files.

    If you are interested in it, the source code is in:
    https://github.com/System25/drxtract

  8. The sound format in DIR files is just Macintosh snd resources, sometimes split into two chunks (sndH and sndS.) In DCR files it’s MP3, and you can rename a DCR file with sounds to .MP3 and any good media player will pick it up (since MP3 frames can be found anywhere in a file.) That is unless the author used SWA, in which case it is zlib compressed in the FGEI chunk, since Xtra assets are always zlib compressed in DCRs… but SWA is pretty much just MP3 with some extra headers to make it loop properly.

    I have a giant document of notes here: https://docs.google.com/document/d/18FMRZ0EvR2uF9rKTtvt-TXyIMFIBVg13bUhmV3_iHD0/edit?usp=sharing


Leave a comment


*

No trackbacks yet.