updateMovieEnabled is a boolean. It's a flag to signal that the changes
in the movie need to be saved when branching to another movie.
The variable is implemented but without any side effect.
The traceLoad property can be 0, 1, 2 or 3. It specifies how much
verbosity is shown when loading cast members.
It's a bt useless for ScummVM. We have our own verbosity mechanism.
Furthermore ScummVM loads all casts up front and unload is a no op.
The actorList is a global array property. Birthed scripts can be added
to it. The `stepFrame` method is called on all objects in the array on
every frame. < D4 had an executePerFrameHook for this.
In Director the exitLock prevents quitting the program when it's set to
TRUE. get and set for the exitLock is implemented.
The underlying functionality, preventing exiting a program, is not
implemented. ScummVM should always respond to a QUIT event.
the searchPath is an array that contains paths that need to be searched
when opening a file. It's a property on the same global level in the
same way itemDelimeter is.
The searchPath is set via cb_theassign2. It's used for assigning
properties to the movie itself. `g_lingo` in the case of ScummVM.
The only known case for cb_theassign2 is in the game Louis Catorze
where it's only used for the searchPath.
Note: cb_theassign() does the same thing for script and factories
The framerate byte is now understood. A framerate byte of 0 means a
framerate of 3. Which is handled during framerate parsing.
The check for 0 is therefor redundant.
In Director 2 and 3 framerates are preset and referenced as: 0x0 to 0xF.
Some movies set a framerate of 0x10.
D2 and D3 interpret this as a framerate of 15.
Which was measured to be exactly the same as setting a framerate of 15.
In D4 it's shown as a framerate of 120.
Movies with a framerate of 0x10:
D2: DATA/WARLOCKSHIP/REUNION (spaceship warlock)
D4: ping.dir (chop suey)
D2 and D3 have 16 distinct framerates, 0x0 to 0xF.
Framerates are integer values. They are rounded down towards their
nearest integer.
The following table is included for completeness.
The information was gathered by creating a D3 movie with an `on stepMovie` handler that counts every frame.
The setting is the setting on the slider in the D3 panel.
It was timed with clicking 'play' in D3 and start on a stopwatch at the
same time. The same for stopping the movie and the stopwatch.
FPS was calculated by dividing the amount of frames given by Director
and the time on the stopwatch.
setting time frames fps
3 60.18 226 3.755
4 30.04 121 4.028
4.1 30.09 131 4.354
4.2 30.29 141 4.65
5 30.38 153 5.036
5.1 30.09 165 5.483
6 30.20 182 6.026
6.1 30.06 201 6.687
7 30.04 228 7.590
8 30.24 260 8.598
10 30.15 302 10.017
12 30.16 364 12.069
15 30.17 454 15.048
20 30.10 602 20.0
30 30.05 904 30.08
60 30.07 1811 60.226
Director engine loads the XObject from the internal names inside the
resource since commit 930d9236b857ff
These changes adds the internal name for AppleAudioCD and LaserDisc to the
filelist.
Director engine loads the XObject from the internal names inside the
resource since commit 930d9236b857ff
These changes adds the internal name for PalXobj and RearWindow to the
filelist.
Multiple improvements:
- use needsUpdate to display with the right framerate
- use system surface to draw the frames on, makes
g_system->updateScreen()
- switch to the palette used in the video
- break when quitting scummvm
- cleanup after the video
XPlayAnim is implemented as a lingo function.
It will currently only display the last frame in the current Palette.
Note: XPlayAnim should be an XObj. For that we first need to implement
loading Xobjects from rsrc files.
Set the stage's coordinates, i.e. top and left to 0, bottom and right
to the surface's height and width.
The stage coordinates, stageLeft, stageRight, stageTop and stageBottom
give the position of the stage with respect to the upper left of the
monitor (0,0).
In ScummVMs case we don't display outside the window and default to the
current window.
For more information see page 160 of the Director 3.1 Interactivity
Manual.
Assorted changes from discussions on Discord & trac
1. Les Shadoks (trac#12909)
2. English (multi) demo for Backpacker Jr
3. Expanded comments from additional research
4. Renamed Fuzzy Floppy to reflect series
5. English Winnie the Witch demo
6. Renamed gameid to avoid confusion with agi:winnie
7. Many more demo/shareware discoveries
8. Second detection files where conflicts introduced
9. Moved ypl2 to "Director extras" section from Chinese
Also a minor alphabetical resort for luxor.
Many thanks to the Discord crew (and some other channels), in
particular eientei, mstea, paratoku. Apologies if I forgot anyone!
PJ97 was used for D6. This section will probably need to be replaced
in the future, but we might as well add the missing value while we're
still using it.
Warlock windows got extra version information in the detection tables.
The result was that the patches didn't match anymore.
This is now resolved by adding the extra version info also in the lingo
patcher.
Commit which added the extra information: a767a592baba
Multiple casts can have the same name. The last encountered cast with
that name was save in a hashtable.
Director seems to use the cast that was encountered last.
This solves the problem by not writing existing cast names.
It happened in the game Louis Catorze. The name mainMenu was associated
with a TextCast but also a ScriptCast. The chunkexpression 'line 5 of
mainMenu' is not valid for a ScriptCast.
In Director only the first line of a label is seen as the frame label.
The other lines are treated as comments.
The label comment is now shown with debugging ouput.
Installers don't need to be in detection in addition to the games
themselves. This one was causing detection collisions with other
engines even after adding a second file.