- for solving the Monkey Kombat puzzle it is necessary that a kombat is
triggered when Guybrush runs into one of the monkeys on the map
- implement SetActorCollisionMode and SetActorCollisionScale
- add EMI-specific calculations for retrieving the sphere data for the
actors (and some minor refactoring for better readability)
The following changes may alter the behaviour in GRIM, too:
- in Actor::collisionHandlerCallback(), call the collision handler for
both affected objects (that is necessary since only one actor may have
a collision handler associated in lua but it may happen that the
character with the handler is standing still and the other one is run
into him)
- Actor::handleCollisionTo() did only update a given position to ensure
that there is no collision - so it is necessary to actually check for
collisions and execute the lua callback if necessary (via
Actor::handleCollisionWith())
Some sets (e.g. the big monkey's engine room) set Guybrush's sort order
to a large value, causing him to become invisible in other places. This
patch resets the sort order for all actors when switching to a new set.
- the order of the active actors is based on the effective sort order
which is based on the sortorder of actors itself but also on the
attached actors
- invalidate the sortorder also when detaching actors
- this fixes two glitches in the final end scene (guybrush is still
displayed after falling from the cliff and monkey robot is drawn in
the foreground)
The path to the Curch of LeChuck has bogus coordinates as out point, so
the game will walk Guybrush to an invalid position when entering that
set. This patch will detect when no path can be found to the destination
position and ignore the walkTo() request in that case.
The behavior for Grim is unchanged in order to avoid the risk of breaking
the game. If the warning is never triggered the distinction can be removed.
When multiple meshes in an EMI costume use the same material each will have
its own Grim::Material instance. If a material used by multiple meshes is
changed by a texi chore the instances will become inconsistent.
With this patch materials are managed by the costume, and there will only
be one instance of each reference material.
On vista point it may happen that two sequences for the rock landings
are executed at the same time. Although they intend to be locked via
pause_scripts(), changing the set will call unpause_scripts() and unlock
all of them.
The patch will use the optional parameter for (un)pause_scripts() to
determine whether the pause calls should be counting (e.g. when
switching a set or opening the inventory) or not.
- several movies (e.g. at the boulder puzzle on vista point)
were not played
- enhance search for BINK header (some movie files don't have a
SMUSH header and for others the movies starts at a higher position in
the stream)
The MakeScreenTextures() opcode is used to create texture tiles from the
current screen content for use with an overworld actor, e.g. when fading over
the slides in the intro. With OpenGL the created textures were mirrorered in
y direction because OpenGL uses a different coordinate system where (0, 0)
is the bottom left corner.
When fiddling with the controls in the Palace of Prosthetics Guybrush is
temporarily put into set "nil". No items should be visible to him in this
situation.
Both EMI and Grim call RenderModeUser when entering the menus or dialogs,
but EMI does not use special "blast" commands to display text or images,
so we cannot suspend regular screen updates. The current implementation
does not switch engine modes in RenderModeUser, which has the drawback
that the frame time is not stopped during pause or menu.
With this patch, EMI handles draw mode like normal mode with frozen frame
time.