Commit Graph
7940 Commits
Author SHA1 Message Date
Colin Snover a63f516df0 SCI32: Replace magic number with kAutoSaveId in QFG4 save code 2017-09-23 20:57:00 -05:00
Colin Snover b038432952 SCI32: Support RAMA's custom save games through kFileIO 2017-09-23 20:56:48 -05:00
Colin Snover 9298f6a81e SCI: Split save game metadata writing to separate function
RAMA has its own custom save game format that game scripts write,
but we still want to be able to use these save game files from the
ScummVM launcher, so the metadata has to be able to be written
separately from the rest of the game saving.
2017-09-23 20:56:48 -05:00
Colin Snover d17ae077dd SCI: Use reference instead of pointer for required out-data in metadata save function 2017-09-23 20:56:48 -05:00
Colin Snover b3c27c2159 SCI: Clean-ups to file handling code
Preparations for adding support for RAMA's custom save game format.
2017-09-23 20:37:51 -05:00
Colin Snover 0ceab96e91 SCI32: Remove unused shrink-to-fit function for string arrays 2017-09-23 20:37:51 -05:00
Colin Snover 50cfb7ad46 SCI32: Fix size for dereferencing non-raw SCI32 arrays
The maxSize given when generating a SegmentRef is supposed to be
the maximum size of raw data that can be held inside the offset-
part of a reg_t, not the entire size including the segment.

This fixes a buffer overflow in "Inside the Chest", which still
does not work, but at least doesn't cause heap overflows anymore
with this change.
2017-09-23 20:37:51 -05:00
Colin Snover 1515bb31a6 SCI: Fix detection of end of audio map & entry size in SCI32
Torin RU map 38140 has an unusual terminator entry; instead of a
normal terminating entry of 11 FFs, its terminating entry is
03 FF FF FF FF C4 36 01 FF FF FF. So, two changes are made:

1. The end-of-map check is now the same as in SSCI1.1+ and only
   checks that the final byte of the Audio36 tuple is 0xFF,
   instead of the entire tuple;
2. The unneeded entry size heuristic has been turned off for
   all SCI32 games.

A quick check of the English versions of LB2CD, EQ1CD, SQ4CD, and
KQ6CD, as well as all English SCI32 games, indicates that this
approach seems to be working correctly.

Fixes Trac#10188.
2017-09-20 13:07:08 -05:00
Colin Snover 9fc24ed0b0 SCI32: Support RAMA's single sound effects volume
The original installer copied RESOURCE.SFX to the hard drive so
there was only one RESOURCE.SFX on CD 1. Instead of requiring
users to create duplicates, just use the single RESOURCE.SFX if it
exists.
2017-09-19 20:00:28 -05:00
Colin Snover 52d9d04919 SCI32: Fix inconsistent patch instruction comments
I missed these lines when going through things earlier.
2017-09-19 20:00:28 -05:00
Colin Snover 6af5133061 SCI32: Put superclass address in r_acc for SCI3 super calls
This fixes a problem in Lighthouse 2.0a where the mini-sub would
fail to start playing the animation of the shipwreck when clicking
on the throttle.

In SSCI, in SCI3 only, r_acc was (inadvertently?) set to the
superclass object ID whenever a super call was made. This happened
because OP_super would call to get the superclass object ID, the
calling conventions of the compiler put this return value into EAX,
and then the PMachine message processing code put whatever was in
EAX into r_acc before each message was processed.

In the game code, there are a sequence of steps that look like
this:

* First, throttle::doVerb is called when throttle is clicked on;
* Which calls getRobot::doit to tell the shipwreck robot to start
  playing;
* Which calls wreckBot::init to reset the Robot for the animation;
* Which calls Hiliter::hotVerbs(0) to remove cursor hotspots;
* Which calls Hiliter::dispose to clean up since it is not used;
* Which causes Hiliter::verbList to get set to 0.
* Later, verbList is loaded into r_acc, and it is still 0;
* Then, Hiliter::dispose makes a super call to Obj::dispose;
* Then, Obj::dispose does nothing except call kDisposeClone,
  which does not mutate r_acc, so r_acc is still 0 from verbList;
* Then we return back through 5 calls to throttle::doVerb;
* Then throttle::doVerb checks that r_acc is non-zero, and if so,
  adds wreckBot to theDoits global, allowing the animation to
  occur.

In ScummVM, without setting r_acc in the super call, the non-zero
check failed and the wreckBot didn't get put into theDoits, so the
entire sequence fell apart. In SSCI, the non-zero check happened
to succeed because the Obj::dispose super call put the Obj class
into the accumulator. So now we do that too, and now Lighthouse
2.0a works here.

Earlier versions of SSCI used EAX for other things in between the
OP_super call and the message processing, so would set r_acc from
different data, so this change does not apply to those versions.
2017-09-19 19:54:30 -05:00
Colin Snover 682b8790fd SCI: Allow multi-step tracing with step-over in debugger 2017-09-19 19:54:30 -05:00
Colin Snover d363234129 SCI32: Fix GfxFrameout::addPlane from causing possible leaks 2017-09-19 19:54:30 -05:00
Colin Snover eba9526fdd SCI32: Remove never-read default values 2017-09-19 19:54:30 -05:00
Colin Snover 836f1bdf44 SCI32: Add audio dump debugger command 2017-09-19 19:54:29 -05:00
Colin Snover 301d0403cb SCI32: Don't warp the mouse twice when its position has been restricted 2017-09-19 19:54:29 -05:00
Colin Snover 22d157cee7 SCI32: Flush all events before warping mouse
This improves the behaviour at the end of PQ4 when navigating the
warehouse with the flashlight by getting rid of mouse events that
may have been queued before the mouse warp to the other side of
the screen is performed. Without this, frequently, those extra
events would then be processed and cause the mouse to jump back to
the opposite side of the screen, triggering another navigation in
the opposite direction.

This patch really only helps when mouse capture is enabled in
ScummVM as well, but it does allow the sequence to be played
pretty much normally in that situation. Additional (pending)
patches to ScummVM itself are needed to move the mouse to the
correct place when mouse capture is off and the system mouse moves
outside of the game window.

Refs Trac#9689.
2017-09-19 19:54:29 -05:00
Colin Snover d36d01b82c SCI32: Add Lighthouse Glider demo to detection table 2017-09-19 19:54:29 -05:00
Colin Snover d9ad1a3ce5 SCI32: Promote Lighthouse demos to ADGF_TESTING 2017-09-19 19:54:29 -05:00
Colin Snover b0b1e89abe SCI32: Hide warning about CD-ROM speed setting in kGetSierraProfileInt
In the DOS interpreters, this function is a no-op. Lighthouse calls
it regardless of platform, so dummy it out for non-Windows
platforms. This is not known to address any particular issue, and
is really just to eliminate the warning about an unknown
configuration setting when starting Lighthouse in a manner that is
compatible with the original interpreter.
2017-09-19 19:54:29 -05:00
Colin Snover 2f9967524f SCI: Stop EngineState::wait mutating r_acc
This wait function is used by kernel calls other than kWait, and
those other functions do not mutate r_acc in SSCI.
2017-09-19 19:54:29 -05:00
Martin Kiewitz 4a9098d083 SCI32: Heap patch for Phantasmagoria 2 to fix DocuStore placements
This fixes placement of "File", "Note", "From" and "Subject"
content.
See bug #10034
2017-09-17 19:13:03 +02:00
Martin Kiewitz 294503f516 SCI32: GK1CD: script for vine swing issue bug #9820
Gabriel's "I can't believe I'm doing this..." line was cut off.
This script patch stops that from happening.
2017-09-17 14:43:27 +02:00
Martin Kiewitz 1d018d65c8 SCI32: Clean-up pass on GK1,GK2,KQ7,PQ4,QfG4,Torin script patches
comments only
2017-09-17 01:51:50 +02:00
Colin Snover a9316560ab SCI: Remove unused selector from script patcher selectors list 2017-09-16 16:33:09 -05:00
Colin Snover e400f1aec2 SCI32: Clean-up pass on Torin script patches
* Convert selector literals to SIG_SELECTOR/PATCH_SELECTOR
2017-09-16 16:33:09 -05:00
Colin Snover d1c43b24ea SCI32: Clean-up pass on GK1 script patches
* Make alignment of operation comments consistent
* Make patch descriptions consistent
2017-09-16 16:33:09 -05:00
Colin Snover 4e6fa4d690 SCI32: Clean-up pass on Shivers script patches
* Convert selector literals to SIG_SELECTOR/PATCH_SELECTOR
* Wrap comments at 80 columns
* Rewrite comments for clarity and brevity
* Make identifier suffixes, patch descriptions, and patch table
  ordering consistent
2017-09-16 16:33:09 -05:00
Colin Snover 4dcf88ef4f SCI32: Clean-up pass on Rama script patches
* Make alignment of operation comments consistent
2017-09-16 16:33:09 -05:00
Colin Snover 3b7e610364 SCI32: Clean-up pass on QFG4 script patches
* Convert selector literals to SIG_SELECTOR/PATCH_SELECTOR
* Make identifier suffixes and patch descriptions consistent
2017-09-16 16:33:09 -05:00
Colin Snover c5dce17b1f SCI32: Clean-up pass on PQ4 script patches
* Convert selector literals to SIG_SELECTOR/PATCH_SELECTOR
* Convert word-size numeric literals to SIG_UINT16/PATCH_UINT16
* Wrap comments at 80 columns
* Rewrite comments for clarity and brevity
* Make alignment of operation comments consistent
* Make identifier suffixes, patch descriptions, and patch table
  ordering consistent
2017-09-16 16:33:08 -05:00
Colin Snover 34683f1725 SCI32: Clean-up pass on PQ:SWAT script patches
* Make patch descriptions consistent
2017-09-16 16:33:08 -05:00
Colin Snover b9600bf466 SCI32: Clean-up pass on Phant2 script patches
* Minor clarity fixes to comments
* Make patch descriptions and patch table ordering consistent
2017-09-16 16:33:08 -05:00
Colin Snover 6fc09ae7c9 SCI32: Clean-up pass on Phant1 script patches
* Convert selector literals to SIG_SELECTOR/PATCH_SELECTOR
* Make identifier suffixes, patch descriptions, and patch table
  ordering consistent
2017-09-16 16:33:08 -05:00
Colin Snover bfb87389f7 SCI32: Clean-up pass on MGDX script patches
* Convert selector literals to SIG_SELECTOR/PATCH_SELECTOR
* Fix a patch to use jmp instead of waste bytes
* Make identifier suffixes and patch descriptions consistent
2017-09-16 16:33:08 -05:00
Colin Snover f7d20dc2e7 SCI32: Clean-up pass on LSL7 script patches
* Convert selector literals to SIG_SELECTOR/PATCH_SELECTOR
* Convert word-size numeric literals to SIG_UINT16/PATCH_UINT16
* Wrap comments at 80 columns
* Rewrite comments for clarity and brevity
* Make alignment of operation comments consistent
* Make identifier suffixes and patch descriptions consistent
2017-09-16 16:33:08 -05:00
Colin Snover ea33f26d05 SCI32: Clean-up pass on LSL6hires script patches
* Convert selector literals to SIG_SELECTOR/PATCH_SELECTOR
* Make identifier suffixes and patch descriptions consistent
2017-09-16 16:33:07 -05:00
Colin Snover 59fe526b16 SCI32: Clean-up pass on Lighthouse script patches
* Make patch descriptions consistent
2017-09-16 16:33:07 -05:00
Colin Snover 08291cca3c SCI32: Clean-up pass on KQ7 script patches
* Convert selector literals to SIG_SELECTOR/PATCH_SELECTOR
* Convert word-size numeric literals to SIG_UINT16/PATCH_UINT16
* Wrap comments at 80 columns
* Rewrite comments for clarity and brevity
* Make alignment of operation comments consistent
* Make identifier suffixes and patch descriptions consistent
2017-09-16 16:33:07 -05:00
Colin Snover bbcee7e6a1 SCI32: Clean-up pass on GK2 script patches
* Convert selector literals to SIG_SELECTOR/PATCH_SELECTOR
* Make alignment of operation comments consistent
* Make patch descriptions consistent
2017-09-16 16:33:06 -05:00
Colin Snover 96d4bb603d SCI32: Clean-up pass on GK1 script patches
* Convert selector literals to SIG_SELECTOR/PATCH_SELECTOR
* Convert word-size numeric literals to SIG_UINT16/PATCH_UINT16
* Wrap comments at 80 columns
* Rewrite comments for clarity and brevity
* Make alignment of operation comments consistent
* Make identifier suffixes, patch descriptions, and patch table
  ordering consistent
* Remove no-longer-needed script patch for day 10 room 808, which
  has been fixed using a different, generic mechanism since commit
  e8c429832f
2017-09-16 16:33:06 -05:00
Martin Kiewitz bbbbfb64dc SCI32: Add script patch for PQ4CD for dual mode (text+speech)
This makes the game menu able to handle a 3rd state, so that the
game shows text but also play speech at the same time.

We need to inject our own view for the new button to really show
up. I'm not that experienced with the SCI32 graphics code, which
is why I prefer snover to do this part.
Right now it will show the button with text selected 2 times in
a row. The first "text" button is the dual mode / "both" state.

Anyway, thanks to snover for notifying me of this game needing
dual mode patched in and also for some help.
2017-09-16 19:58:40 +02:00
Martin Kiewitz 5c901afad5 SCI: LB2-Dual mode: Change "DUAL" button to "BOTH"
Now it says "BOTH", just what the button in SQ4 says as well.
2017-09-16 13:26:41 +02:00
David Fioramonti 817c9e77aa SCI32: Fix bad play call in Shivers room 23090
This fixes a bad play call by replacing it with a fade call.

The newRoom function In script rm23v090 (room 23090) was
calling a play function with 5 arguments, but the play
function only takes 4 arguments. Since it looks like a fade
call it has been replaced with that.

Fixes Trac#10200.

snover helped.
2017-09-15 23:44:13 -05:00
Martin Kiewitz 1504f41706 SCI: KQ6-Dual mode: Change "DUAL" button to "BOTH"
Now those say "BOTH", just what the button in SQ4 says as well.
2017-09-16 00:34:15 +02:00
Colin Snover 2ee7354852 SCI32: Blacklist pirated GOG.com + German GK2
Fixes Trac#9744.
2017-09-15 15:06:46 -05:00
Colin Snover b8af2ca66f SCI32: Fix clipping of inventory items in Phant2
This fixes overlapping of the left arrow in all cases, but the
scroll delta and initial offset of inventory items will only be
fixed in new games because the affected objects are global objects
whose bad properties get persisted into save games.

Fixes Trac#10037.
2017-09-15 12:08:31 -05:00
Colin Snover 029eeeb803 SCI32: Fix Phant2 "auto-save"
The game has a feature where it will automatically create a save
game when you quit the game through the in-game control panel (or
when you die, for some reason).

Unfortunately, due to bad programming, this automatic save would
just overwrite whatever was in save slot 1 (slot 0 in the original
interpreter). Find this attempt to auto-save the game and redirect
it to the auto-save slot. This might not be totally correct, but
it is at least better than destroying a save game.

Fixes Trac#10201.
2017-09-14 20:45:02 -05:00
Colin Snover 88420970b7 SCI32: Fix PQ:SWAT platform 2017-09-14 00:30:57 -05:00
Colin Snover 421a2defcb SCI32: Drop platform from game ID for games that are Windows-only 2017-09-14 00:30:57 -05:00