Age | Commit message (Collapse) | Author |
|
This fixes buggy PQ4 system script code and makes entering user
and password on the police computer not trigger a signature mismatch
anymore.
Script code was fixed by Sierra in PQ4 CD.
|
|
|
|
For whatever reason, Sierra decided that the final patches would
go in the root directory for Phant2. The game disc includes
(different, older) patches for many of the same resources in the
PATCHES directory, and loading those instead makes the game not
always work quite right.
|
|
|
|
|
|
Non-use of these kernel calls was assumed by reviewing script
disassembly by SV, but it turns out that SV was not picking up
script patches correctly in SCI3 games, so this data is no longer
considered reliable.
|
|
|
|
Phant2 creates save game names that append "<PROTECTED>" at the
end of the game name, with an assumption that the game name is
always exactly 36 characters long. This seems to be OK with other
games too (tested GK1, SQ6, and Torin).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fixes Trac#9577.
|
|
Refs Trac#9976.
|
|
Refs Trac#9976.
|
|
|
|
This was broken by 9f33f2b3df22a26314dbb74173f49bc930c7a1f9.
|
|
|
|
Refs Trac#9974, Trac#9975.
|
|
|
|
This should make things slightly more responsive and avoids
unnecessary rendering of frames that are just going to disappear
in a moment.
|
|
Calling through EventManager::getSciEvent to flush events is
pretty inefficient and created stalls that lead to dropped
frames during the chapter 7 chase in Phantasmagoria 1.
If necessary, performance could be improved further by extending
Common::EventManager to expose SDL_FlushEvents, but this seems to
finish in 0-1ms so should be OK for now.
Refs Trac#9974, Trac#9975.
|
|
|
|
This fixes delayed mouse cursor updates during the chase scene in
Phant1.
Refs Trac#9975.
|
|
|
|
|
|
|
|
If a user fails to rename audio files in the required manner when
copying them, detecting multi-disc audio by looking for a renamed
audio file does not work very well. Looking at RESSCI.00n is a
better choice, though this is not completely valid since e.g.
Rama 1.0 US has only one RESOURCE.SFX volume which its installer
copies to the hard drive, so a little more work will need to be
done in the future to find and fix these kinds of edge cases.
Refs Trac#9976.
|
|
|
|
|
|
Since Resource::makeStream returns a MemoryReadStream which will
not attempt to free the resource memory, it is fine to always
dispose those streams and get rid of the separate resourceStream
property, which was a holdover from some past WIP resource design
which no longer exists.
|
|
makeSOLStream was leaking the SeekableSubReadStream object it
creates itself if it was not called with DisposeAfterUse::YES. That
substream is an implementation detail which should not rely on
the caller to be destroyed.
|
|
Since these later SCI32 games weren't really designed to work with
subtitles-only message mode, if this doesn't work consistently or
breaks the games a lot in other places, the subtitles-only message
type could possibly be implemented in some other way, like by
messing with the game's speech volume global instead.
|
|
|
|
|
|
This fixes at least Lighthouse audio 808 in room 270, and audio
801 in room 810.
|
|
|
|
Fixes Trac#9793.
|
|
|
|
|
|
In b4c0be8b42d63cbf3c808be1a94839483f674ce9 keyboard events were
adjusted to send control characters to game scripts, which matches
how keyboard input works in SSCI. Unfortunately this broke games
using kMenuSelect because that kernel code was not expecting to
receive control characters.
Here is an amended list of known types of keyboard shortcuts, for
future reference:
* All games with text inputs (Ctrl+C clears text boxes)
* Most games using MenuBar, like QFG1EGA (Ctrl+P pauses the
game, Tab or Ctrl+I show inventory)
* QFG1VGA (Ctrl+S shows stats)
* Torin (Ctrl+N, Ctrl+O, Ctrl+S, etc. activate menu commands)
* LSL1VGA & LSL3 (Ctrl+Alt+X to bypass age check)
* Most in-game debuggers (Alt+T for teleport)
The shortcut handling code is still not 100% accurate since there
are some edge cases that are not implemented (e.g. in DOS/SSCI,
Shift+Ctrl+<key> usually sends the same key information as
Ctrl+<key>, but not if <key> is Tab), but it should now be working
in a consistent and rational manner for end-users.
|
|
Used by:
* All games with text inputs (Ctrl+C clears text boxes)
* QFG1VGA (Ctrl+S shows stats)
* Torin (Ctrl+N, Ctrl+O, Ctrl+S, etc. activate menu commands)
The branch that used to shift control keys for SCI versions <=
SCI_VERSION_1_MIDDLE was bogus; history indicates it was intended
to be used to fix backends that sent control characters when
Ctrl+Alt were used together, but that case is already handled by
the Alt-checking code just prior to that code. Games expect to
receive control characters only when Ctrl is the only active
modifier, and this seems to be consistent across all versions of
SCI engine from SCI0 all the way through at least SCI2.1.
Fixes Trac#6703, Trac#9837.
|
|
Refs Trac#9776, Trac#9864. Fixes Trac#9797.
|
|
These objects should have been initialized only during the first
pass. Double-initialization does not cause any visible problem
problem during normal operation (mostly it just causes memory
waste by making Object::_baseVars/_baseMethod double up their
data), but could have silently allowed games to receive bogus data
for an out-of-bounds property or method index, instead of raising
an error.
|
|
1. In SCI0/1, selectors and offsets in the method block are
stored contiguously (all selectors, then all offsets), with a
null separator between the two runs. All the later versions of
SCI instead interleave selectors & offsets. Since these values
are already being copied into a new array anyway, code for
reading method selectors/offsets is now simplified by
interleaving this data when it is written into _baseMethod
for SCI0/1, so the same equation for retrieving method
selectors/offsets can be used across all SCI versions.
2. In SCI1.1-2.1 branch, the method count was being copied into
the first entry of the array, which meant that SCI1.1-2.1 had
extra code for dealing with the fact that the first entry was
not an entry. This has been fixed, and the extra code removed.
3. Data was being overread into _baseMethod in all games SCI0-2.1.
(SCI0/1 had an extra magic value of 2, and SCI1.1-2.1 had an
extra magic value of 3). Reviewing history, it's not clear why
this happened, other than that it appears to have been
introduced at 7b0760f1bc5c28abcede041a6e3930f84ff3d319. My best
guess is that this was a confusion between byte count and record
count, where the intent was to read an extra 2 bytes for the
null separator in SCI0/1, but it actually read 2 records
instead. (I do not have a guess on why SCI1.1 ended up with a
3.) This overreading has been removed.
|
|
Fixes Trac#9910.
|