Media Manager Xtra
An Xtra for
synchronizing cast members and external files
There will be no more updates
of this Xtra, as I have switched from Director to C#.
Problem
Director media assemblies
– castLib files, and the castLib part of movie files – can be a good way
to deliver media to end users. But while developing, the concept is not very
good.
·
Castlibs
and movies are very inefficient when used with source control software (CVS,
SourceSafe etc). You miss most of the benefits of such systems, and it makes
Director very hard to use in multi-programmer teams
·
Castlibs
are often stored with great unnecessary overhead. Save and compact a file, and it’s 1000 kB. Make one little change in one member – and
suddenly the file is 2000 kB.
·
It
can be hard to keep track of if your media is up to date. Since Director’s
modifiedDate functionality is broken, it’s hard to tell if a certain member is
imported from the latest source version. E.g. has the artist’s latest
background bitmap been imported or not?
·
If
internal editors are used to edit media that comes from external files, it can
be hard to tell which is the original. If the artist
needs to rework a bitmap, can he edit the original file? Or will you have to
paste the member’s bitmap into Photoshop, save it, tell him to go ahead, and
finally be notified by him to reimport the file?
·
An
extensive undo system is probably hard to create when having only media
assemblies for storage. With individual files, however, a simple backup copy of
the file can automatically be made for each detected change. The user can
decide keeping any number of backups for each file.
·
Director
can corrupt its own media. Cast members can crash Director, symbol tables can
become incorrect, and castLibs impossible to open. A wrecked castLib or movie
can steal many many hours of precious development time.
·
Your
“common” castlibs, that you use in all of your projects, cannot easily reside
in another folder than your movies, as it creates problems both in authoring
time (> 1 persons developing simultaneously) and in runtime (the Projector
can spend lots of time trying to find the castlib on the network, even though
it lies right beside it). Often, you’ll have to copy the file back and forth
between the “common” folder and your project folder instead, which is horrible
for version control.
·
Working
over low-bandwidth networks is difficult, e.g. when using VPN over the
internet. You only want to send/receive changes, not whole castlibs – and as a
programmer often only the code. Handling this manually takes time and is
error-prone.
·
Batching
/ searching the media and scripts for a whole project where members are
organized in several casts and movies is difficult.
You have to do the work in several passes, one for each movie. E.g. when I’ve
decided to change a handler or script name in Endogine, I have to open each
movie that I think uses it, and search/replace it. This will create bugs.
All of the above is made easier if you always use external files as the
originals during development. Director has very limited support for this: “Link
to External File”. Some of the flaws are:
·
it
won’t allow you to use the Paint window for bitmaps
·
text
members cannot be linked at all
·
external
scripts (and other member types) can be overwritten even when they haven’t
changed. Problematic with source control software, and when working with other
developers.
·
when
the final CD-ROM or Shockwave is built, you’ll probably want the media to
reside in castLibs. You have to write code to import the linked media, and also
go on another testing round the ensure that the new,
internal media work the same as the linked media did before.
Solution
To resolve these problems, I’ve
developed the Media Manager Xtra. It is a MIAW-based Xtra that synchronizes
your castLib media with external files.
When you modify, delete or add an
external file, the Xtra will ask you if you want the corresponding member
updated.
When you modify, delete, add or move a
member, it will make the corresponding changes to the external file. Backups are
stored automatically.
For delivery of the final product to end
users, on CD-ROM or Shockwave, you just take your castlibs and go. There are no
references to the external files in the project (unless you specifically added
them for some reason) so everything will work just the same as in authoring.
(Super-cool feature to come later: The
loathed Ctrl-D command – member duplicate – can also be detected and eliminated
quite easily)
This is also another step to facilitate
my (and others’) transition from Director to other IDEs. Together with my
.NET-like classes, my coding and workflow becomes more and more like what I’ve
learned to appreciate in Visual Studio. After porting the Endogine sprite
system and tools to C#, I’ll have a very powerful, robust, yet simple
environment for multimedia and game development.
Inner workings
For each member, the Xtra uses two
corresponding data files, one with the media (.bmp, .wav etc) and one with the
"resource fork": member settings (regpoint, member name/number etc).
The Xtra loops through the currently
selected member(s) several times per second, comparing all their simple (ie not
#image or #media etc) properties with cached data. If any change is detected,
the cached data is updated and saved to the resource fork file (with optional
backup of the old file).
A bit less often (because it’s slower), the
“rich data” properties are compared with the files on disk. This is done by
saving the media to a temporary file, and doing a file
compare with the members current external file. If the temporary file isn’t the
same as the current file, the current file is moved to a backup folder, and the
temporary file is renamed to be the new current file.
Scanning the external file system for
changes is slower than I hoped, so for now it has to be started manually.
Later, I could implement a low-priority asynchronous scanning system, which
doesn’t interfere with the user.
Quirks
Member names
External file names will be the same as
the member names. I’ve chosen this because it makes the connection between
member and file very obvious, and you don’t have to check lookup tables to find
out what a certain file contains.
On the other hand, it imposes new restrictions
on Director cast member naming. They MUST have unique, file-system-valid names.
The Xtra automatically renames unnamed
or duplicates by adding a “_RN_” prefix, so you can easily identify them.
Moment of save
Whenever a change is made in a member,
MMX will write the new data to disk. Director doesn’t save to disk until told
explicitly. So, if you leave a movie without saving, the external files and the
members will be out of sync.
I will fix this later by using a Temp
folder for external media, which is copied to the actual folder only when the
Director movie/casts are saved.
Change detection
There could well be situations where my
cast member changes detection misses something. It could be that I miss
checking certain member properties, or that my code misinterprets what has
happened when cast members are moved/copied/duplicated. Please report these
incidents!
Backup after editing external files
Currently, the backup will be a copy of
the edited file, not a backup of the member as it should be. Backups after
editing the member works like it should.
Current version
From the 2005-02-06 Alpha version, the
Xtra is theoretically good for real-world use. I’ll start using it in a project
together with SourceSafe the next week and see what needs to be done in order
to make the workflow as smooth as possible.
Note that the Xtra currently doesn’t
affect the casts and members, except for renaming members with unacceptable
filesystem names (empty strings, duplicate names, chars like */?\ etc) so it should be safe to try it out.
Log
2005-02-07 Fixed bug: Member types that
I haven’t specified, like #Vector and #Shockwave3D, didn’t write their generic
.dat file to disk (vList save of member.media). This messed
up media checking and file management.
2005-02-07 Fixed bug: When opening an
already exported movie with >2 castLibs, some members weren’t found
2005-02-07 Fixed
bug: MIAW bg color uses the stage’s bg color instead of white
2005-02-07 Fixed bug: Members with dots
in their names (eg “IO.FileInfo”) get truncated filenames
2005-02-06 Alpha
version. Checking if a
member has been modified seems to work OK now. Automatic backups of the
external media file and resource file is made each time a change is detected.
Scanning of external folders for new/deleted/modified files added.
2005-02-05 Project settings file added.
Default external folders moved to subfolder “Media”.
2005-02-04 First test version
2005-02-01 Began coding
2005-01-31 System design
http://www.endogine.com/tools/mmx/mmx.zip
(~200 kB)
Walkthrough for testing
·
Unpack
the zip into a subfolder in your Director Xtras folder. Drop gscmp.exe there
too.
·
Start
Director and open a movie
·
NOTE!!! When the Xtra starts, it will rename members with names that
can’t be used as file names (see Quirks / Member names above)
·
Start
the Xtra (on the Xtras menu)
·
Click
the “Add to proj” button. This sets up a project file,
“_Project.txt”, and exports all member info to the subfolder “Media”.
·
Move
a member and verify that the system has noted it (look at the MediaManager
window)
·
Change
a member name, and verify that the external file is renamed as well (by looking
in the folder)
·
Make
a change in a member (e.g. edit a bitmap) and verify that a backup folder has
been created, containing the old .png, and that the updated file has the
correct image.
·
Edit
an external media file (e.g. a .RTF file), click the
“Imp. Files” button and verify that the member has been updated
Known bugs
·
Moving
a member between castLibs isn’t handled correctly (.inf file is not updated,
files are not moved)
·
Movies
with >1 internal castLibs will not be handled correctly.
·
Cannot
forget() the MIAW – even if closed, it’s still running
in the background. Problematic when trying to open it again without restarting
Director.
Report other bugs
to
info(at)endogine.com
System requirements
Windows
only.
FileXtra4 Xtra (free) for creating folders, renaming files etc
Download at http://kblab.net/xtras/FileXtra4/
SharpExport Xtra (free) for exporting bitmaps
Download at http://www.sharp-software.com/products/index.htm#sharpexport
AudioXtra Xtra (commercial, demo version works) for exporting sounds
Download at http://xtras.tabuleiro.com/download/audio.htm
gscmp.exe (free) command line tool for comparing
files
Download at http://www.goldsealstudios.com/downloads.html
Put it in the same
Xtras folder as you put the Media Manager files.