Whenever a SceneChangeDescription is constructed
manually (e.g. in Conversation), it now has its
listenerFrontVector initialized with the default value
(pointing straight forward).
The addItemToInventory() and removeItemFromInventory()
were still using uints, which meant that if they were
somehow called with an id of -1 (which marks an invalid
item), they'd crash the engine. This shouldn't matter for
regular play, but may occur when debugging.
Implemented the ConversationSoundTerse and
ConversationCelTerse action records, which are even
shorter variants of the corresponding Conversation types.
Made changes to the base ConversationSound to reduce
code duplication.
I don't know how to test this, but appendComponent() returns a new path,
so use that instead of assuming it added things to the existing path. I
discussed this with lephilousophe before committing.
After discussing with lephilousophe, the .ogv player (used by the
remastered version of Grim Fandango) once again finds the movie it's
looking for. Unfortunately, the player doesn't work at all for me,
making the game less playable than before. But it's how 2.8 behaves, so
there's that.
This was tested in the demo, but it looks like it should be the same case for game proper
It looks like a typo in the assignment of the _G(wilbur_should) global var, made the engine/script only play the first speech cue and then do a different action
(which also used to cause a crash https://bugs.scummvm.org/ticket/14948)
The game when played in DosBox, plays the speech cues and returns control to the player.
However, as of yet, there are two issues I could find with this speech sequence:
1. Sometimes the "hmmm" idle animation of Wilbur will interfere while the speech cues are playing (in between them I think) and then Wilbur will get stuck (soft lock)
without the engine giving control back to the player. An assumption here is that due to the engine currently not playing the speech animation for Wilbur, which may be could "block"
the idle animation from kicking in(?).
2. The sfx (a "crunch" sound) (600_008) and first speech cue (602w012) when using the kibble only plays the first time. Subsequenct uses do not produce the sfx sound (but the speech plays). On DosBox the sfx plays in subsequent uses.
This would have caught the recent Hopkins regression. It also warns
about a few other things at the moment, so that has to be looked into at
some point.
Spaceship Warlock is optimised for very slow disk reads; quite a lot of
movie changes will be preceded by a music cue and a still image, knowing
that the system will take a couple of seconds to read the next file.
As a compromise, add a fake delay of [file size]*1000/150000 ms to movie
switches. This can be short-circuited by clicking the mouse, so it is
still possible to navigate around quickly.
It is possible to use relative path syntax (e.g. multiple colons in Mac
path syntax, . or .. in Windows path syntax) to move up the directory
tree in relation to the current path. Because resolvePath() works from a
fixed base, we have to rectify any paths with relative markers so they
become an absolute path, which is then resolved in the usual way.
Fixes entering the bridge for the Asteroid or Terra missions in
Spaceship Warlock; both of these movies need to jump to a movie
named BBalcView in a different folder, and without rectification it will
select BBalcView in the current (WARLOCKSHIP) folder which is used for
the first mission only.
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.
This should give the same behaviour as DirectorSound::playCastMember.
Fixes sounds playing twice if the animation takes too long in Spaceship
Warlock (e.g. the hovertaxi landing in the demo).
Added support for the record types that replaced the bare
Autotext, and combined it with a PeepholePuzzle. This
necessitates some ugly, diamond-shaped multiple
inheritance, but the original engine's solution of replacing
the current record with a different type one at runtime
is even uglier. Also, made changes to Autotext to correctly
support LIFO ordering.
Added a struct corresponding to the MARK boot chunk,
which contains the source rects for the autotext markings
introduced in nancy8 (and used in the journal).
Implemented the AddListEntry, DeleteListEntry, and
MarkListEntry action records. These are responsible for
modifying the list of autotext strings for each autotext
surface. Also, the JournalData struct now includes data
for entry marking. The last change breaks compatibility
with nancy6+ saves.
Implemented the action record type that computes a
sum of values, each one with an attached percentage
weight. The values themselves can be either supplied
verbatim, or extracted from the TableData struct.
This was implemented in nancy8, but only started getting
used in nancy9.