Commit graph

80700 commits

Author SHA1 Message Date
Torbjörn Andersson
b583c4031a NEVERHOOD: Handle sound 3 when deleting a sound group (bug #12930)
It's consistent with how sounds 1 and 2 are handled, and seems to fix
bug #12930, where the game can crash on exit otherwise.
2021-09-30 01:37:20 +03:00
sluicebox
bfb01974f6 SCI: Fix QFG3 crash when angering the guardian
Fixes bug #12968

Unrelated to bd992479b3
2021-09-29 04:51:07 -05:00
Paul Gilbert
9585fd17a8 AGS: More properly fix paletted fading 2021-09-28 21:00:09 -07:00
Paul Gilbert
14786606c7 AGS: SetObjectFrame fallback to dummy frame in an empty loop
From upstream 1496f7f6419d192bd4060956492e8897678035c9
2021-09-28 20:18:15 -07:00
Eugene Sandulenko
9f5112da37
SCUMM: Fix detection for Japanese Mac fbpack 2021-09-28 21:45:01 +02:00
Eugene Sandulenko
c541dd87fc
SCUMM: Added detection for Japanese Mac fbpack 2021-09-28 21:12:41 +02:00
Paul Gilbert
64c94097b5 AGS: Added detection entries 2021-09-27 18:58:18 -07:00
Torbjörn Andersson
097694720a GRIM: Partially revert 6bb4658ea6 to work around bug #12932
The moveToFadeOutTrack() function was introduced many years ago to fix
"sound skipping a bit when a fade out track starts". Unfortunately,
while this may have worked flawlessly back then it causes crashes in
certain cases now.

The point of this is to avoid the crash for the upcoming release. A more
long-term solution should be in the works.
2021-09-27 22:21:29 +02:00
Thierry Crozat
36b7b08fa5 AGS: Disable loading from the launcher for some games
Kathy Rain and Whispers of a Machine use the ags_sprite_font plugin
and load the fonts in their game_start script. This script is called
when starting a new game, but not when loading a savegame on startup
(for good reasons). As a result when loading a savegame from the
launcher we were missing those fonts and it was using replacement
fonts that do not quite work properly.

This fixes bugs #12945 and #12964.
2021-09-27 19:25:45 +01:00
Paul Gilbert
d9ed62041d AGS: Skip videos with unsupported video tracks rather than erroring 2021-09-25 10:29:21 -07:00
Paul Gilbert
c924c3e84e AGS: Implemented fade_interpolate 2021-09-25 09:54:55 -07:00
Thierry Crozat
6bbee47f71 AGS: Try to load font with WinFont as a fallback when TTFFont fails
This fixes bug #12948 AGS: Segfault when picking up at police report.
For that bug the font is properly loaded by FreeType, but it is a
non-scalable Windows font whose size does not match the requested
size. The original AGS handles TTF font sizes differently to how we
do it in TTFFont (and also has some hacks on top of that), and it
was easier here to use WinFont that try to tweak TTFont to work
with this case.
2021-09-24 23:52:00 +01:00
Paul Gilbert
9a22f1b913 AGS: Correct some game names 2021-09-23 19:27:52 -07:00
Paul Gilbert
c92c15583d AGS: Added detection entries 2021-09-23 19:17:53 -07:00
athrxx
c0960a1172 SCUMM: (SCUMM7/8) - fix minor walking code glitch
(see https://bugs.scummvm.org/ticket/12499#comment:11)

In Actor::startWalkActor() we call adjustXYToBeInBox() twice, first with the dest coords, then again with the resulting coords from the first call. In the example from the bug ticket (clicking on Kenny the lemonade selling pirate) this will adjust the x position from 503 to 501 on the first pass and from 501 to 500 on the second pass.

The original SCUMM 5 and 6 (I checked MI2 and SAM) actually do it exactly like that, so it becomes kind of obvious where our code originates from.

However, for SCUMM 7 and 8 (I checked FT, DIG, COMI) the function has been simplified considerately. It makes the call to adjustXYToBeInBox() only once (and no call to checkXYInBoxBounds() either), so in our COMI example the x position will stay at 501.
2021-09-23 23:14:50 +02:00
djsrv
d014bdd92c CREDITS: Update name 2021-09-23 11:49:59 -04:00
Matthew Duggan
2e135b284e ULTIMA8: Adjust proc loop detection workaround again
The previous workaround value chosen to fix U8 bug #12913 really locked up
Crusader too long (>10 s), so there's no clean solution here that works for
both games it seems.  Revert the threshold back for Crusader games only, and
keep the high threshold for U8.  I hope the next time I touch this line is to
remove it because I work out the root cause of the problem :|
2021-09-23 16:09:55 +09:00
Paul Gilbert
4d37530ed2 AGS: Cleanup of A Tale of Two Kingdoms detections 2021-09-22 20:13:13 -07:00
Matthew Duggan
b476d645f9 ULTIMA8: Put back ARG_NULL8 macro with fix
Removed this macro in dc17170 because it had one usage and was wrong anyway,
but it's nice to avoid the unused variable warning.
2021-09-23 07:47:44 +09:00
Matthew Duggan
8fcfd9cd6f ULTIMA8: Use 2 bytes of intrinsic stack for UINT8
This fixes #12917.

The usecode "push byte" opcodes (0x0A and 0x5D) always push 16 bits on the
stack, but the ARG_UINT8 macro was only removing 1 byte.  Most of the time this
went unnoticed because the UINT8 was the last argument in most cases (eg, a z
val), or unused.

This led to an inconsistency where sometimes z values were being popped with
ARG_UINT16 and sometimes ARG_UINT8.  The original games do not support z values
beyond 254, so this should always be UINT8.

Additionaly, a while back "push byte" was fixed so it always sign extends, but
this could result in a case where we pop incorrect values.  For example, a high
Z value could get sign-extended on push, and then popped back as a UINT16,
giving a z of 64000ish.

Fix by always moving the SP by 2 bytes, only use the first one.

Correcting this also fixes the strange color ordering I thought was needed for
I_jumpToAllGivenColor in Crusader: No Regret, where actually it should have
been popping the values as 16-bit instead of 8-bit.
2021-09-23 07:47:35 +09:00
Paul Gilbert
3da05fa6b7 AGS: AGSParallax plugin fix, workaround for Stargate Adventures 2021-09-21 21:09:21 -07:00
Paul Gilbert
6945f9e50f AGS: Added detection entries 2021-09-21 18:55:21 -07:00
sluicebox
3d624cf8aa SCI: Don't poll input events from MIDI thread
In March, b67c2d72d6 moved some MIDI
initialization from the main thread to the MIDI thread. This caused
MidiPlayer_Midi::sysEx() to run on the MIDI thread for the first time.
This is a problem because it calls SciEngine:sleep(), which polls
events, and that causes MacOS to throw an exception for calling
SDL_PollEvent() on a non-main thread.

While investigating, it also turns out that MidiPlayer_Midi::sysEx()
and MidiPlayer_Fb01::sysEx() were calling OSystem::updateScreen(),
and that also shouldn't be happening on a non-main thread.

Now SciEngine::sleep() is only called on the main thread, and
OSystem::delayMillis() is called on the MIDI timer thread.
Continuing to call sleep() on the main thread keeps the UI responsive
when loading patches, which can take several seconds.
The OSystem::updateScreen() calls had no effect and have been removed.

Fixes bug #12947
2021-09-21 16:37:24 -05:00
Paul Gilbert
c17c9b7dd6 TITANIC: Make findByWordClass a static method 2021-09-20 18:55:10 -07:00
Paul Gilbert
a2e0753596 AGS: Added Sepulchre detection 2021-09-19 12:12:11 -07:00
Paul Gilbert
b057ba5d9e AGS: Added Broken WIndows detections 2021-09-19 12:04:22 -07:00
Paul Gilbert
26279bfc20 AGS: Added KQ4 Retold detection 2021-09-19 12:04:09 -07:00
SupSuper
84c34e8df4
WINTERMUTE: Replace convert_utf with built-in conversions
Now that ScummVM supports UTF8 we can just use it
2021-09-19 16:58:03 +02:00
antoniou79
e8a3bf7b40 SKY: Display message at attempt to delete autosave slot
Sky engine does not allow autosave file deletion
2021-09-17 22:58:19 +03:00
antoniou79
a1f2881c0d SKY: Fix savegame deletion via GMM 2021-09-17 22:58:02 +03:00
antoniou79
e70908f7d4 SKY: Make autosave slot (0) write protected
This prevents the user trying to overwrite it manually using GMM
2021-09-17 22:57:46 +03:00
Orgad Shaneh
b27d5f8fd2 ENGINES: Fix moving savegames to a new free slot
This was broken for most engines.
2021-09-17 13:09:53 +03:00
neuromancer
d260720b80 PRIVATE: removed and refactored assertions with side effects 2021-09-17 10:02:16 +02:00
Torbjörn Andersson
0e4bbfe9ea BURIED: Fix door opening transition to Da Vinci study (bug 12885)
Integrated upstreams code for playing the correct animation when opening
the door to Da Vinci's study. I take no credit for this, since the
complete solution was just handed to me and I could never have figured
it out on my own.
2021-09-17 08:34:29 +02:00
Torbjörn Andersson
81247443e7 NEVERHOOD: Only lock out monster cave from demo, not the other exit
You should still be able to return back to the TNT room. It's just the
monster cave that's cut off from the demo.
2021-09-14 11:35:56 +02:00
Paweł Kołodziejski
dfb1dab24e
GRIM: Restore remastered game entry but add as not supported 2021-09-14 08:00:34 +02:00
Torbjörn Andersson
2f65e6d5b0 NEVERHOOD: Don't crash when entering monster cave in the big demo
The demo doesn't include the cave, so show the thank you screen instead.
Otherwise, it will crash when loading a non-existing resource.
2021-09-14 07:36:02 +02:00
Paweł Kołodziejski
534e7f610c
STARK: Added message for not supported renderers 2021-09-13 07:48:29 +02:00
Filippos Karapetis
9d3eee71a0 GROOVIE: Do not wait for MIDI initialization with enhanced music tracks
This prevents the game from getting stuck in the MIDI initialization
screen if a MIDI/MT-32 driver is selected and enhanced music tracks are
present. In this case, MusicPlayerIOS is used, which plays the digital
music tracks, and does not perform any MIDI initialization
2021-09-13 01:11:43 +03:00
Kai Knoblich
1ca65e652e SLUDGE: Fix build with Clang >= 11.0.0
Clang 11 and newer check the types of return values more strictly and
generate an error if there is a discrepancy.

However the "bool loadGame()" function, returns the value "NULL", if
loading of a savegame was unsucessful, whereas Clang expects a return
value of type "bool".

Remedy the issue by using "false" as return value instead of "NULL".
2021-09-12 22:36:09 +03:00
Ben Castricum
18601e51d7 SCUMM: Fill in missing language for 2 HES games 2021-09-12 22:27:38 +03:00
Filippos Karapetis
17c337a3a9 SCI32: Fix game options crash in non-English PQ4 versions - bug #12901
Only enable the speech+subs toggle in the English version of PQ4.
French and German versions feature localized text with English voices.
Also, our injected speech+subtitles view is currently only in English.
2021-09-12 22:27:38 +03:00
Paul Gilbert
9d20c8ee94 AGS: Fix crash in Time Gentelmen Please 2021-09-11 15:13:35 -07:00
Paul Gilbert
4a5bf99438 AGS: Hack to fix rain display in IA KQ3
The ags_snowrain plugin seems to have logic in it to transparently
translate 320x200 based coordinates when the game is run in
640x400 mode. Since the current plugin code is a recreation rather
than a reimplementation, I wasn't sure where to do the fixes,
so for now simply put a hack in the set baseline script, which was
all that was needed for KQ3
2021-09-11 14:46:09 -07:00
Paul Gilbert
99c723167b AGS: Remove commented out debug code from plugins 2021-09-11 14:45:54 -07:00
Matthew Duggan
17fe1125af ULTIMA8: Allow turning while retreating in Crusader
The original game allows you to turn while retreating, but that was not
previously possible.

To make the turn always possible, step() now does not wait for the movement
animation.  This should work as AvatarMoverProcess::run terminates early if the
Avatar is busy.
2021-09-11 22:17:04 +09:00
antoniou79
84ddbdd97f AGS: Change a few char variables to int8
In order to specify that they should be treated as signed

Some ports may treat an (unspecified) "char" as unsigned by default. Android does this for its ARM architectures and while we did fix this by enforcing -fsigned-char to its compiler, the issue may come up for other ports. Also it should be better to clarify in the engine when a variable is not actually storing string characters.

I've spotted and changed the most "safe" cases I could find for this. As far as I can tell, out of these, only the Outline field and fontoutline array could potentially be assigned valid negative values which would cause bugs for ports treating chars as unsigned.
2021-09-10 20:30:51 +03:00
Matthew Duggan
98444ff234 ULTIMA8: Fix Crusader targeting slightly
There were two differences to the original which caused occasional targeting
mishaps:
1.  The reticle and actual shots were using different starting positions for
the shot (Avatar centre vs Avatar corner)
2. Z difference was not being taken into account when finding the "best" target

This fixes both problems.
2021-09-10 22:07:51 +09:00
Coen Rampen
a7f7d774b5 AGS: Fix hanging sustained notes
Some AGS games (f.e. 5 Days A Stranger) use sustain controller events in their
MIDI data. When stopping playback in the middle of a track, sustained notes
will hang unless sustain is turned off. This commit fixes this issue by turning
on the "send sustain off on notes off" option of the MIDI parser. This fixes
issue #12905.
2021-09-10 15:03:35 +02:00
Coen Rampen
8926c8ea54 AGS: Fix MIDI volume control
MIDI user volume setting was not applied until the start of the next track.
Fixed this by implementing Engine::syncSoundSettings.
2021-09-10 15:03:35 +02:00