3256 Commits

Author SHA1 Message Date
Torbjörn Andersson
fba0afefa5 SCUMM: Remove unnecessary space. 2018-06-04 06:41:51 +02:00
Adrian Frühwirth
d433aedf37 SCUMM: Improve 'imuse play' debugger command error handling
This commit introduces the following (seemingly non-invasive) changes
to make the 'imuse play' debugger command more useful (i.e. don't crash
when trying to load the wrong kind of (sound) resource.

* ScummEngine::readSoundResource()
  Instead of fatally error()'ing upon hitting a non-sound resource type,
  e.g. a room header (0x524d4844 aka RMHD), we now only issue a warning().
  This enables the already existing dead code which properly returns 0
  (aka no resource loaded).

* ResourceManager::validateResource()
  Instead of fatally error()'ing upon hitting an illegal glob type we now
  only issue a warning() and return false (also existing dead code).
  All methods calling validateResource() check its return value so this
  seems like the right thing to do anyway.

* ScummDebugger::Cmd_IMuse()
  Instead of directly calling ensureResourceLoaded() we now call
  getResourceAddress() instead (which in turn calls ensureResourceLoaded()
  and handles other edge cases) and only attempt to play a sound if the
  returned pointer actually is valid.

Fixes Trac#10527.
2018-06-03 19:38:52 +01:00
Adrian Frühwirth
56d2bf77ba SCUMM: Ensure pointer returned by getResourceAddress() is usable
In some cases the pointer returned is used directly without further
error checking.
As most instances already assert() in this case this commit simply
adds asserts where missing and deemed appropriate.
2018-06-01 17:08:39 +00:00
Eugene Sandulenko
1e1ed29704 SCUMM: HE: Mark Bink as engine dependency 2018-05-30 09:26:17 +02:00
Bastien Bouclet
61f9398b04
Merge pull request #1187 from bgK/detection-refactor-unknown
ENGINES: Return unknown game variants with the list of detected games
2018-05-28 18:43:15 +02:00
Adrian Frühwirth
07efcfd458 SCUMM: Fix wrong comment about iMUSE digital variable 2018-05-21 11:24:40 +02:00
Adrian Frühwirth
c7f3416daa JANITORIAL: Remove trailing whitespace 2018-05-20 23:40:20 +02:00
Adrian Frühwirth
8cb0109b40 SCUMM: Improve autosave handling
v5+ scripts can request saving/loading of savegames, this type of
savegame is internally called a "temporary" savegame
(_saveStateTemporary == true) which is invisible to the user (I'm not
sure whether this is by design or not).

Currently the savegame handling in scummLoop_handleSaveLoad() doesn't
distinguish between such temporary savegames and normal autosaves and
unconditionally resets _lastSaveTime (even after loading).
This has the unwanted side effect of potentially delaying the creation
of normal autosaves which are supposed to be created in accordance with
the autosave period setting in the GUI.

This commit makes sure that _lastSaveTime only gets updated if and only
if saving a (non-temporary) autosave.
2018-05-10 17:51:30 +00:00
Bastien Bouclet
90b78c5446 ENGINES: Merge GameDescriptor and DetectedGame 2018-05-10 09:04:23 +02:00
Bastien Bouclet
1de5aca585 ENGINES: Set the GameDescriptor decription in the constructor 2018-05-10 09:04:23 +02:00
Bastien Bouclet
5aff87dc15 ENGINES: Turn GameDescriptor into a simple struct 2018-05-10 09:04:23 +02:00
Bastien Bouclet
643c24db75 ENGINES: Change MetaEngine::listSupportedGames to return plain game descriptors 2018-05-10 09:04:23 +02:00
Bastien Bouclet
8fb149e3c7 ENGINES: Change MetaEngine::findGame to return a plain game descriptor 2018-05-10 09:04:23 +02:00
Bastien Bouclet
cf1ebf2951 ENGINES: Add unknown game variants to the game detector results 2018-05-10 09:04:23 +02:00
Adrian Frühwirth
7ebbb12dfb SCUMM: Remove superfluous 'else' in IMuseInternal::ImSetTrigger()
Both means to calculate `diff` are essentially equal because
wraparound of unsigned integers is well-defined and does what
the 'else' branch is simulating manually. Because of this,
gcc complains when compiling with -Wduplicated-branches.
2018-05-07 22:21:42 +02:00
Adrian Frühwirth
48406bbd41 SCUMM: Simplify clampCameraPos() using CLIP 2018-05-07 19:54:45 +02:00
Adrian Frühwirth
49116b4ae7 ALL: Use CLIP to clip volumes 2018-05-05 17:57:31 +02:00
Adrian Frühwirth
7b48934598 SCUMM: Protect autosave (slot 0) from deletion/overwriting 2018-05-01 22:34:00 +02:00
Lothar Serra Mari
451cf2304f ENGINES: Show the unknown Game dialog only when the detector is launched by the Add Game feature 2018-04-29 21:47:10 +01:00
Adrian Frühwirth
9bee9e1ba6 JANITORIAL: Fix whitespace 2018-04-19 12:08:31 +02:00
Adrian Frühwirth
00e59a3122 ALL: Load savegame thumbnail only when necessary
This commit introduces the following changes:

1. Graphics::loadThumbnail()

   Now returns a boolean and takes a new argument skipThumbnail which
   defaults to false. In case of true, loadThumbnail() reads past the
   thumbnail data in the input stream instead of actually loading the
   thumbnail. This simplifies savegame handling where, up until now,
   many engines always read the whole savegame metadata (including
   the thumbnail) and then threw away the thumbnail when not needed
   (which is in almost all cases, the most common exception being
   MetaEngine::querySaveMetaInfos() which is responsible for loading
   savegame metadata for displaying it in the GUI launcher.

2. readSavegameHeader()

   Engines which already implement such a method (name varies) now take
   a new argument skipThumbnail (default: true) which is passed
   through to loadThumbnail(). This means that the default case for
   readSavegameHeader() is now _not_ loading the thumbnail from a
   savegame and just reading past it. In those cases, e.g.
   querySaveMetaInfos(), where we actually are interested in loading
   the thumbnail readSavegameHeader() needs to explicitely be called
   with skipThumbnail == false.

   Engines whose readSavegameHeader() (name varies) already takes an
   argument loadThumbnail have been adapted to have a similar
   prototype and semantics.
   I.e. readSaveHeader(in, loadThumbnail, header) now is
   readSaveHeader(in, header, skipThumbnail).

3. Error handling

   Engines which previously did not check the return value of
   readSavegameHeader() (name varies) now do so ensuring that possibly
   broken savegames (be it a broken thumbnail or something else) don't
   make it into the GUI launcher list in the first place.
2018-04-07 09:26:20 +02:00
Eugene Sandulenko
511457818d SCUMM: Mark methods as override 2018-03-28 12:01:38 +02:00
Thierry Crozat
7cbf5a9289 SCUMM: Fix interrupting speech not working with AZERTY keyboard
On my AZERTY keyboard the period is obtained using SHIFT + ; and
the code checking the PERIOD keycode and no modifier was failing
on both account. The manual for my French DOTT mentions the period
key, but I have not actually checked how it worked with the original
executable and if using the semicolon key without shift or using the
colon key (which would be the period key on a English-US layout)
works.
2018-03-24 18:17:24 +00:00
Bastien Bouclet
4d0bb753e4 GUI: Remove the ThemeItem draw queues
Drawing nows happens directly when the Dialog or Widget draw methods are
called. This makes it easy to debug why a particular low level draw
method was called, by inspecting the call stack.

This replaces the notion of "buffering" by two independant ways to
control what is drawn and where:
- The active layer is used to select whether the foreground or
  background part of the dialogs are rendered by the draw calls.
- The active surface is used to select if the draw calls affect the back
  buffer or the screen.

The foreground layer of the active dialog is drawn directly to the
screen. Its background layer is drawn to the back buffer. This way
widgets can restore the back buffer in order to update without having to
redraw the dialog's background.

Dialogs lower in the dialog stack are drawn entirely to the back buffer.
2018-03-12 11:46:04 +01:00
Robert Crossfield
b1bce3ec37 SCUMM: MM V0: Fix regression from 038b3b178939f1bcc6714eda1b88c3e80e787c02 and comment/cleanup 2018-03-12 11:36:04 +01:00
Eugene Sandulenko
e7eaff13bf JANITORIAL: Fix code formatting 2018-02-04 12:59:57 +01:00
nukeykt
e5bfead345 SCUMM HE: Use Miles AdLib driver 2018-02-04 12:56:06 +01:00
Eugene Sandulenko
c8975f9ba7 Revert "SCUMM: Check for and flag demos correctly"
There are too many regressions.
2018-02-01 08:03:39 +01:00
Colin Snover
ffdb5a8ebc SCUMM: Fix compilation failure when DISABLE_TOWNS_DUAL_LAYER_MODE is defined 2018-01-31 21:24:09 -06:00
Colin Snover
08186aeec6 SCUMM: Rename iMUSE save/load function to avoid confusing function hiding 2018-01-31 21:24:09 -06:00
Henrik "Henke37" Andersson
f71dc0d8ab SCUMM: Check for and flag demos correctly
Rewrote the detection matching to use the extra field like the other
two.

This requires extensive testing due to touching code shared for a lot of
games and being sensitive to individual versions of games.
2018-01-31 21:01:28 +01:00
Colin Snover
4e6b60948d SCUMM: Remove variable shadowing 2018-01-31 12:24:32 -06:00
Colin Snover
979ae76ec1 SCUMM: Fix compilation failure 2018-01-31 12:08:17 -06:00
Eugene Sandulenko
52ecf7f5b2 SCUMM: Fix warning (it generates another one in common/ though) 2018-01-31 18:02:04 +01:00
Colin Snover
2e061d95c5 COMMON: Move VER macro for serializer into common code 2018-01-31 17:58:01 +01:00
Colin Snover
9916b26383 SCUMM: Replace UB-triggering serialization code with Common::Serializer
Fixes Trac#10342.
2018-01-31 17:58:01 +01:00
Colin Snover
9d10a998ae SCUMM: Fix stack overflow initializing locals
This happens when clicking on the triangular button in room 27 in
The Dig.

There are probably several other places where this overflow
happens, since there are several different `int args[16]` in
the code (and many more `int args[` of various sizes, not all of
which are at least NUM_SCRIPT_LOCAL).
2018-01-31 17:56:33 +01:00
Colin Snover
b166746b9c SCUMM: Fix stack overflow initializing locals
This happens at least when trying to right click on the motorcycle
at the start of Full Throttle.
2018-01-31 17:56:33 +01:00
Adrian Frühwirth
16eac57834 SCUMM: implement lipsync for v7 games 2018-01-31 16:38:07 +01:00
Giovanni Bajo
3a60637d77 SCUMM: really implement lipsync
It looks like the code was there, but it was never fully implemented
because _curSoundPos was never being incremented. Experimentally,
it looks like it works if it is a 60FPS counter.
2018-01-31 16:36:24 +01:00
Bastien Bouclet
5878c618c9 GUI: Remove Dialog::markAsDirty to expose full GUI redraws 2018-01-27 18:12:34 +01:00
Kirben
f383f00274 SCUMM HE: Add early version of Let's Explore the Farm with Buzzy. 2017-12-22 15:46:22 +11:00
Colin Snover
4d3f05ae79 SCUMM: Fix array overflow writing var when no current script is set
This situation is triggered normally when _currentScript is 0xFF,
but it could potentially also happen if _currentScript is some
other number >= NUM_SCRIPT_SLOT, so the check is a bit more
conservative than it might appear to need to be.
2017-12-01 19:39:30 -06:00
Colin Snover
2b5605362a SCUMM: Fix signed integer overflow reading default v70HE cursor 2017-12-01 19:23:00 -06:00
Colin Snover
c7989bb333 SCUMM: Fix buffer overflow reading default v70HE cursor 2017-12-01 19:22:56 -06:00
Colin Snover
5cd2c9a387 SCUMM: Fix possible return of garbage values 2017-12-01 19:22:52 -06:00
Colin Snover
57084b4a1b SCUMM: Fix UB shifting negative integers in Actor 2017-12-01 19:22:35 -06:00
Colin Snover
9a36870e78 SCUMM HE: Fix UB shifting negative integers 2017-12-01 19:22:19 -06:00
Eugene Sandulenko
89a782466a SCUMM: Revert skipping of MM C64 demo original save screen display attempt
As per discussion in bug #10116.
2017-11-27 20:50:28 +01:00
Eugene Sandulenko
5183b2024c SCUMM: Do not do anything for real with original save screen in MM C64 demo 2017-11-26 05:15:42 +01:00