Age | Commit message (Collapse) | Author |
|
This change ensures that these kernel calls operate in the same
manner that they did in SSCI.
|
|
1. pushi opcode now displays decimal value and selector value (if
one exists) in-line
2. lofsa, lofss, and super opcodes now display resolved
object/class names
3. Opcode arguments are visually aligned
|
|
|
|
|
|
|
|
Silently returning zero values can cause games to break. e.g.
Shivers 1 room 35170 has a script bug where vJoystick::handleEvent
makes a super call which causes doVerb to be called a second time
with no arguments. In the original game this happened to work
because the value already on the stack happened to be 1. In ScummVM
this silently (unless VM debug messages were enabled) failed
because the uninitialised read value was forced to 0.
|
|
I missed the one for varselector sends handled by the secondary loop in
op_ret. This fixes #9641.
|
|
|
|
|
|
Fixes Trac#9642.
|
|
Used in Shivers room 35170 when pressing the play button.
|
|
|
|
For example, Shivers room 932 when subtitles are enabled.
|
|
SSCI created a fake va_list and passed it to vsprintf, so extra
placeholders would just silently end up reading garbage memory.
|
|
At least Shivers has VMDs with resource IDs above 2^15; treating %d
as signed means that the wrong filename gets created.
|
|
Thanks @tsoliman for the data.
|
|
Fixes Trac#9637.
|
|
Fixes Trac#9639.
|
|
Fixes Trac#9581.
|
|
|
|
|
|
|
|
This allows references in memory to be dumped to disk for
examination by other tools. In the case of SCI32 bitmaps, data
is output in 8-bit TGA format without transparency, which allows
the current palette to also be examined. (The alternative would
be to use 32-bit TGA to display transparency, and lose the
palette, or dump to a more complicated format that supports 1-bit
transparency.)
|
|
|
|
Before cef5506e9f0ba328a064f058f074c979b8ba6485, we used to check
for any files starting with resmap.00. We now check for resmap.000
and resmap.001.
|
|
KQ7 1.51 writes int16s from the save game catalogue into a Str
object, then retrieves byte 0 from the string and compares it to
-1. This happens to work out because (1) characters were treated
as signed in SCI2.1early and earlier, and (2) int16s in the save
game catalogue were little-endian.
In SCI2.1mid and later, this trick no longer works because
characters are treated as unsigned and get zero-extended instead.
Fixes Trac#9632.
|
|
Thanks @OmerMor.
|
|
Fixes Trac#9612.
|
|
Fixes Trac#9588.
|
|
|
|
|
|
|
|
In SSCI, strchr is called against a hex string with a duplicate 0
("01234567890abcdef") to determine the decimal value of hex digits,
which means the values A-F are incorrectly interpreted as 11-16
instead of 10-15.
All versions of SSCI with support for hexadecimal escape sequences
in messages (starting somewhere around Feb 1993) are buggy.
The native save/load dialog of SCI32 relies on this defect to
render the up and down arrows of the game selector.
Fixes Trac#9582.
|
|
SSCI transitions code sends a large number of small show rects
to the graphics manager, one at a time, for each division of a
transition. Each time a rect is submitted, a call to showBits
is made. This design was used when transitions for SCI32 were
first implemented in ScummVM, and it worked OK because the
hardware surface was updated by EventManager::getSciEvent,
not showBits, so the large number of calls to showBits from the
transitions code did not adversely affect engine performance.
Later in SCI32 engine development, hardware surface updates
were changed to occur in showBits so that the hardware surface
would be updated at frame-out time, instead of at input-in time.
This change meant that now the large number of calls to showBits
from transitions became very expensive, and the engine would
stall constantly refreshing the entire hardware surface.
To fix this problem, the transitions code now (1) maximises the
size of rects coming from transitions, when possible, and (2) only
calls showBits when all the rects from one frame of a transition
have been calculated and added to the show rects list.
Additionally, there were some arithmetic errors in the
implementation of pixel dissolve that have been corrected in this
changeset.
Fixes Trac#9614.
|
|
Fixes Trac#9584.
|
|
updateInfoFlagViewVisible accepts a property index, not a selector
ID.
Fixes Trac#9583.
|
|
|
|
|
|
|
|
Exports with a zero offset are supposed to point to the start of
the code block in the script hunk, but they were being ignored.
This may also apply to SCI1.1 games, but until that can be
verified, this fixes the zero-offset in only SCI32 games for now.
|
|
Fixes Trac#9583.
|
|
Thanks @hpvb for the report.
Fixes Trac#9615. Closes #850.
|
|
|
|
|
|
Fixes Trac#9613.
|
|
Game scripts pass an extra argument which is never used in SSCI.
This happens e.g. when warping from room 620 to room 860 in
LSL6hires.
Adding a signature for kPalVarySetVary for SCI2.1early games only
does not work because KQ7 1.51 is detected as SCI2.1early but the
interpreter includes kPalVary code that matches SCI2.1mid.
Fixes Trac#9611.
|
|
|
|
Previously, export calls to non-existing functions would act like
there was never an export call, and the breakpoint would never be
triggered.
|
|
|
|
Previously, this was using the offset of the property dict inside the
script. However, this isn't unique. For example, SQ6's DPath and
PolyPath classes both have their property dict at offset 8 of their
respective scripts. This would break Obj::isMemberOf.
Closes #846.
|