The original logic doesn't hold up to testing. The position/width/height
of a sprite can be changed at any time without any extra flags; although
the screen needs to be redrawn before you can see any change.
The main thing that the sprite puppet flag does is determine if sprites
are updated from the score data when the frame changes.
Fixes the broken mouse cursor tracking sprite in Chop Suey.
Fixes the sprite scaling in the Doc Martens minigame in Virtual
Nightclub.
Fixes director-tests/D4-unit/T_SPRT01.DIR
Sprites in a score frame have a width and a height; it appears these
values are only to be used if the "stretch" flag is set. Otherwise, the
cast dimensions are used.
Fixes the scaling when picking up the photo album from the filing
cabinet in P.A.W.S.
This patch adds support for filmloops composed of other filmloops.
It also fixes a bug in the filmloop bbox computation during Sprite::setCast() , we have to create a case kCastFilmLoop to prevent it from going to default case as the default case equates it to dims which is initialrect (0 value) , so the setCast function basically made film loop bbox 0.
Steps to reproduce:
Run the command: ./scummvm --start-movie="ATD\HD\ccTWRRAD.DXR" totaldistortion-win.
After running the command, the fish will now be visible. Previously, it was not being displayed due to lack of nested film loop support.
It has been observed that for `Shape` cast members, the default color
is white, as there were no foreColor in frames data for white fore-color
casts. This indicates how director saves more memory by omitting this
foreColor(255).
`mediaband-win` used several of transparent white rectangle shape
cast to identify hover and click events. Using lingo `rollOver` command
However these shapes were set foreColor white which was not being
embedded in frames data. This caused the shapes to be rendered black
which is default foreColor.
--start-movie="intro.dxr" mediaband-win
According to "Director in a Nutshell, page 15", autoPuppet unlike
puppet is not a single property, instead it is individual for each
sprite property, ie we can have auto-puppet locH of sprite, but
other properties are not auto-puppet.
This change adds support for individual auto-puppet properties.
[Based on Director in a Nutshell, page 15]
The following properties of a sprite are auto-puppeted whenever
the property is set: backColor, blend, editable, foreColor, height,
ink, loc, locH, locV, member, moveable, rect and width. Auto-puppeting
of individual properties has no effect on the puppet of sprite property
['Lingo Dictionary' 601 Fixes]
Sprites now have a duration as specified in the (new) score view.
When lingo modifies any of the sprite properties that property
will be auto-puppeted, i.e. the value set will stick for the
duration of that sprite despite any values recorded in the score.
This can cause existing lingo which relied on setting the property
of a sprite without the use of 'puppet' to behave differently.
Calling 'puppetSprite spriteNumber, FALSE' will also clear any
currently auto-puppeted properties.
The default sprite type for an empty channel in Director is kInactiveSprite;
make sure this is used as some scripts depend on it.
Fixes being unable to summon the drum in Eastern Mind.
Sprites stored in frames are referenced by position (minus the
registration offset), width and height. Film loops are the same. As
such, fix the bounding box calculation for the film loop to use the
correct sprite positions (e.g. center for bitmaps), then fix the
subchannel generator to take these into account.
The default assignment constructor just copies data over and we could
end up with _matte pointing twice to the same surface. It's now properly
reseted.
These checks apparently need to be done in a specific order. If in D3 no
cast info is found, the auto hilite check cannot be performed, so it
falls back to the matte check.