After discussion with dreammaster. Apparently the 3DO version uses
a resolution of 640x400 pixels internally, not 320x200. Doubling
the X and Y coordinates from what they were seems to match what I
have seen in YouTube videos of the original game.
Some messages spoken to Watson show up in the journal as if spoken
to the inspector. (And, presumably, the other way around, but I
haven't gotten that far in playing the game yet.)
The computer opponent always aims for the bullseye as long as he
needs more than 50 points. After that, he's supposed to aim for
the closest score to what he needs to win. But this coordinate
was never used, and the computer player would always aim at the
same spot outside of the dart board. This, of course, made it
practically impossible for it to beat you. This commit fixes
that.
I thought at first that this fix wasn't quite right, because the
computer won't always hit the score he aims for even if you remove
the random inaccuracy from its aim. But I think it still hits
near the intended target, so maybe this is good enough?
When capturing Blackwood in The Case of the Serrated Scalpel, the
whole scene seems to be running in slow motion. This simply doubles
the speed for it. It may still be a tad slow, but at least it fits
the music much better I think.
Loading from the GMM during the prolog resulted in the mouse cursor
getting stuck hidden and possibly other game state issues, so best to
disable loading in these cases as already was done for saving.
This fixes bug Trac #10746.
Saving/loading already handles savegame creation/play time, the
information just wasn't displayed until now because the MetaEngine
features weren't being reported as supported which I assume to be
an oversight.
Fixes Trac#10006.
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.
This flag is removed for a few reasons:
* Engines universally set this flag to true for widths > 320,
which made it redundant everywhere;
* This flag functioned primarily as a "force 1x scaler" flag,
since its behaviour was almost completely undocumented and users
would need to figure out that they'd need an explicit non-default
scaler set to get a scaler to operate at widths > 320;
* (Most importantly) engines should not be in the business of
deciding how the backend may choose to render its virtual screen.
The choice of rendering behaviour belongs to the user, and the
backend, in that order.
A nearby future commit restores the default1x scaler behaviour in
the SDL backend code for the moment, but in the future it is my
hope that there will be a better configuration UI to allow users
to specify how they want scaling to work for high resolutions.
Added it into hasFeature() of all engines which returned `true` in
simpleSaveNames() before.
As mentioned in #788, SCI is not always using simple names, so it
doesn't have such feature now.
Engines with "simple" savenames would support "Run in background" in
save/load dialog and gradual save slots unlocking. Other engines
save/load feature would be locked until save sync is over.
Without this change the Apple gcc 4.0 compiler (the last version to
support the MacOS X 10.4 SDK) generate a lot of errors regarding
trying to initialise references to Sherlock::Scalpel::Talk with the
address to a Sherlock::Talk object, or about forward declarations of Sherlock::Scalpel::Talk.
Since 'w' and 'h' are members of ManagedSurface, using them as
input parameters to a method caused GCC to warn about them being
shadowed. For just about every file in the Sherlock engine...
Recently we started to use this as new semantics, although in the past
we used simly <engine>_H. Now these guard defines are consistent with
rest of the files which are used in the engines.
As far as I can tell, the lines I removed to draw the search box
are already handled by the call to makeField() above. Also, they
were drawing to the wrong surface, and one of them was in the
wrong direction, which is what triggered an assertion.
This was part regression (ManagedSurface is picky about the order
of the parameters to the line drawing functions), part bug since
it was drawing a horizontal line instead of a vertical.
This call draws a very short vertical line to separate the
rightmost "join" of the middle horizontal bar in the inventory
dialog from the scrollbar. Unless you know what you're looking
for, it's pretty hard to spot the difference.
Thanks to dreammaster for figuring out the proper fix, while I
was still trying to figure out what it was trying to draw.
This patch fixes the compile error:
format not a string literal and no
format arguments [-Werror=format-security]
Just suply "%s" as the standard format.
This way the string is not interpreted as format
which may lead to security issues.
Hopefully all issues were caught
Also added a "wait for keypress" right after result of latest dart
throw is shown like in the original, so that dart results are
not immediately cleared.
Also added support for "1 point" instead of writing "1 points"
In Pratt's Loft, the player can probe the pillow with either the needle
or the hatpin. However, the German version accidentally set up use
actions for the hatpin twice, resulting in a crash if you tried to use it
Some lines were not translated that well, probably because the
original added words together in code based on English grammar,
so the translator was probably very restricted.
Spanish needs to be checked
Spanish also needs to be copy and slightly changed for SH1
Also fixed Journal button text for French + Spanish
Fixes bug #7019
Also make it possible to somewhat easily have hotkeys within
the button text itself and not just having to use the very first
button text character as hotkey.
WidgetBase already has a virtual destructor, thus there is no need to make
WidgetFiles have an empty virtual destructor around. This also prevents g++
for Dreamcast from failing due to an internal compiler error.
This likely fixes just about every remaining outstanding bug report.
The variable, for a savegame being loaded, was only reset when a
previously loaded scene was freed. But if you loaded a game directly
from the launcher, there was no previous scene to free, and the
variable remained set. Which meant that you could do things in the
scene and then either leave the scene or make another save without
the _sceneStats update method being called to reflect the changes
made in the change in the global flags.
This may cause slight timing issues when doing animations of Holmes
playing musical instruments; I've already added special cases for
several of them to still keep animations in sync with the music
This fixes cases where the array has multiple entries; removing a
previous entry could result in startCAnim's Object &cObj ending
up pointing to an incorrect entry
Replace fixed text umlaut with octal value
Also fix German "Tarot Cards" translation, Tarock cards are the
french cards, that are not used for predicting the future / telling
fortunes
Talking to Watson in the Alleyway scene can result in the text
"Change Speaker to Sherlock Holmes" appearing mid-conversation,
even in DosBox. This workaround fixes this by skipping the text.
remove the possible opcode check, that was added to fix the Spanish
version crash during the alley room. We now have support for the
inverted exclamation mark and we want to show that character.
This also shows the inverted question mark. See bug #6931
If there are any more invalid characters, this commit may cause
assert()s in fonts.cpp again.
Support for spanish inverted exclamation mark
Was skipped over in the original interpreter and also wasn't
even included in the spanish font
We create the character by ourselves and map it accordingly
This would happen when drawing an unscaled, flipped sprite that
was clipped because it was partway below the bottom of the
screen. It was incorrectly adjusting the top and bottom again,
even though flipping only affects left and right.
Rose Tattoo had the zone lists cleanly listed end to end,
but Serrated Sclapel has, at least for Outside Scotland Yard,
a whole bunch of garbage at the start of the walk data block
When using ScummVM's save/load dialogs, savegames are numbered from
0 and up, so don't add 1 when saving/loading in the original
dialogs. (Populating the original savegame list already worked as
expected, which made it even more confusing.)