As discussed in Discord, in PR#5998 and other places, we can just use PRId64
from <inttypes.h> as a reliable way of printing int64 values on all
platforms, now that this header is guaranteed to be available everywhere.
Fixes build warnings on some 64-bit platforms, which were introduced by my
own previous commit 6ce2ba98f8.
Having the loading action only happen in Channel::setClean doesn't cover frame 1,
which is a straight copy from the frame data.
Fixes the logo movie loading in Escape From Planet Arizona.
Previously, when loading a frame, sprite data would be skipped entirely
if the sprite channel was in puppet mode. This is mostly correct, -except- for
sprite scriptIds: these are always determined by the score.
Unfortunately this means checking for puppet mode in every branch of the
switch statement, which is a bit tedious, but basically what we need to
do anyway for D6 autopuppet mode.
Fixes clickable hotspots in Team Xtreme: Operation Weather Disaster.
Fixes various graphical artifacts, e.g. movie ENG:J11@230
of Spaceship Warlock having a big steam cloud in the top-left instead of
the left-turn hotspot, the Invictus logo in Over-Ring-Under having a
large white box to the right of the text.
Since filmloop casts call the Sprite Data loading methods directly,
we want to fix the possible negative dimensions there.
Fixes starup of sequencer video in totaldistorion
--start-movie="ATD\HD\ADTDVSVF\TDVIDDB1.DIR" totaldistortion-win
It has been mentioned in "Director in a Nutshell, pg 15" that
auto-puppet is first introduced in D6, therefore completely
dropping checks for D2-D5. Also added code that skips individual
property of a frame if that specific property is found it be
auto-puppet.
eg, A sprite has change in `locH` and `blend`, and blend is auto-puppeted
(it was set somewhere before, and autoPuppet flag for this bit is true),
then that means frame loading will only skip any changes made to `blend`
and will load `locH` as usual.
Previously, the palette ID namespace was shared between cast ID, builtin
ID and resource fork ID. This was quite messy.
The new approach is to use CastMemberID; builtin palettes are libId -1,
cast palettes use their respective libId, and a null CastMemberID
indicates a blank entry.
In D5 and up, you can have multiple casts in the same movie, along with
external casts. Unlike shared casts these are different namespaces;
each movie maps the casts to a libId, which is then used by
CastMemberID.castLib.
For D4 and below, the default cast libId is now represented by
DEFAULT_CAST_LIB. This should make refactoring easier in future.
In Director, palette IDs in the palette channel apply to all subsequent
frames. If we seek to an arbitrary frame, the correct palette
should be applied.
Fixes the introductory cutscene in Majestic: Part 1.
If a channel contains a 1-bit bitmap cast member, use the foreground
color instead of black when rendering in Background Transparent mode.
Fixes various text bitmaps in Total Distortion and iD4 Mission Disk 1.
In Director, FPS entries in the tempo channel apply to all subsequent
frames. If we seek to an arbitrary frame, the correct tempo settings
should be applied.
Fixes the animation speeds of the cauldron and the walking teapot in
Chop Suey.