aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/state.cpp
AgeCommit message (Collapse)Author
2019-07-21SCI: Implement full kWait behaviorsluicebox
Fixes PQ3 bug #11020
2017-12-01SCI: Partially clean up SCI16 video playback codeColin Snover
2017-09-19SCI: Stop EngineState::wait mutating r_accColin Snover
This wait function is used by kernel calls other than kWait, and those other functions do not mutate r_acc in SSCI.
2017-09-14SCI32: Fix Phant2 "auto-save"Colin Snover
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-05-06SCI32: Add missing ifdef for EngineState::_eventCounterColin Snover
2017-05-06SCI32: Detect and handle tight loops around kGetEventColin Snover
In SSCI, mouse events are received through a hardware interrupt and the cursor is drawn directly to the graphics card by the interrupt handler. This allows game scripts to omit calls to kFrameOut without stopping the mouse cursor from being redrawn in response to mouse movement. ScummVM, in contrast, needs to poll for events and submit screen updates explicitly from the main thread. Submitting screen updates may block on vsync, which means that this call should really only be made once per frame, just after the game has finished updating its back buffer. The closest signal in SCI32 for having completed drawing a frame is the kFrameOut call, so this is where the update is submitted (by calling OSystem::updateScreen). The problem with the approach in ScummVM is that, even though the mouse position is being updated (by calls to kGetEvent) and drawn to the backend's back buffer (by GfxCursor32::drawToHardware), OSystem::updateScreen is never called during game loops that omit calls to kFrameOut. This commit introduces a workaround that looks at the number of times kGetEvent is called between calls to kFrameOut. If the number of kGetEvent calls is higher than usual (where "usual" seems to be 0 or 1), we assume that the game is running one of these tight event loops, and kGetEvent starts calling OSystem::updateScreen until the next kFrameOut call. We also then start throttling the calls to kGetEvent to keep CPU usage down. This fixes at least two such known loops: 1. When interacting with the menu bar at the top of the screen in LSL6hires; 2. When restoring a game in Phant2 and sitting on the "click mouse" screen. A similar workaround may also be needed for kGetTime, though loops around kGetTime should preferably be replaced using a script patch to call kWait instead.
2017-04-22SCI: Clean up unnecessary delayed restore flagsColin Snover
_delayedRestoreGame is always set and cleared at the same time as _delayedRestoreGameId, and _delayedRestoreFromLauncher is written but never read.
2017-04-21SCI: Improve audio volume & settings sync codeColin Snover
This patch includes enhancements to the ScummVM integration with SCI engine, with particular focus on SCI32 support. 1. Fixes audio volumes syncing erroneously to ScummVM in games that modify the audio volume without user action (e.g. SCI1.1 talkies that reduce music volume during speech playback). Now, volumes will only be synchronised when the user interacts with the game's audio settings. This mechanism works by looking for a known volume control object in the stack, and only syncing when the control object is present. (Ports and planes were researched and found unreliable.) 2. Fixes audio syncing in SCI32 games that do not set game volumes through kDoSoundMasterVolume/kDoAudioVolume, like GK1, GK2, Phant1, and Torin. 3. Fixes speech/subtitles syncing in SCI32 games that do not use global 90, like LSL6hires. 4. Fixes in-game volume controls in SCI32 games reflecting outdated audio volumes when a change is made during the game from the ScummVM launcher. 5. Fixes SCI32 games that would restore volumes from save games or reset volumes on startup, which caused game volumes to be out-of-sync with ScummVM when started. 6. ScummVM integration code for audio sync has been abstracted into a new GuestAdditions class. This keeps the ScummVM- specific code all in one place, with only small hooks into the engine code. ScummVM integrated save/load code should probably also go here in the future. Fixes Trac#9700.
2017-03-30SCI: Stop getCurrentCallOrigin from mutating stack framesColin Snover
This fixes incorrect backtraces after a workaround failure or other call to getCurrentCallOrigin when one or more stack frames are calls to local procedures.
2016-10-09JANITORIAL: Remove trailing spacesEugene Sandulenko
2016-09-29SCI: Add prefix to global variable constantsColin Snover
2016-09-29SCI: Replace magic numbers for globals with named constantsColin Snover
2016-09-29SCI: Generalize code for getting information on the current callColin Snover
2016-08-19SCI: Remove references to SCI32 features from SCI16 video playerColin Snover
2016-07-06SCI32: Add SaveFileRewriteStream for read/write access to filesWillem Jan Palenstijn
At least Phantasmagoria and PQ:SWAT require this. This adds a ReadStream/WriteStream to support this. It replaces the previous VirtualIndexFile which required reimplementation of most read/write functions.
2016-03-02SCI32: Don't do a syncWithScripts on restore from launcherMartin Kiewitz
Causes issues in at least gk1 (option + inventory plane are shown) Game::restore is not called, when doing restores from launcher, so in the original interpreter this script code wasn't called either. Fixes option + inventory planes etc. being shown right after restoring via launcher, when original save/load dialogs were disabled.
2016-01-07SCI: Remove unused member property _palCycleToColorColin Snover
2015-04-26SCI: implement delayed restore via ScummVM menuMartin Kiewitz
will delay restoring a saved game until the next kGetEvent or kWait also implement aborting playback for kPortrait and kShowMovie
2014-12-27SCI: Fix warningWillem Jan Palenstijn
2014-11-04SCI: fix Japanese Space Quest 4 (intro + buttons)Martin Kiewitz
At least SQ4 uses #j text prefix as signal for the interpreter to not use the PC9801 hires font, but to use the internal low res font instead
2014-11-02SCI: add support for \n and \r in Japanese textMartin Kiewitz
fixes Police Quest 2 Japanese intro thx to wjp for helping
2014-02-18SCI: Make GPL headers consistent in themselves.Johannes Schickel
2014-01-29SCI: fix typo in getSciLanguageString CID 1003556Martin Kiewitz
2012-07-05SCI: Some updates to SCI32 kernel graphics functionsFilippos Karapetis
- Added a stub for kSetScroll, which sets the target picture immediately for now - Added an initial stub of kPalCycle (doesn't work correctly yet) - Adjusted the signatures of kUpdateLine and kDeleteLine for LSL6 - Unmapped kSetHotRectangles again, with updated information on how it is used in Phantasmagoria
2012-06-23SCI: Implement kPlayVMD subop 23 (set palette range)Filippos Karapetis
Fixes the wrong palette during video sequences in GK2 and the demo of RAMA
2012-06-13SCI: Implement the file operations needed for the save dialog in PhantasmagoriaFilippos Karapetis
Phantasmagoria's scripts keep polling for the existence of the savegame index file and request to read and write it using the same parameters when opening it. The index file is closed and reopened for every save slot, which is slow and can be much slower on non-desktop devices. Also, the game scripts request seeking in writable streams and request to expand the existing index file. To provide this functionality and to reduce constant slow file opening and closing, this virtual class has been introduced
2011-11-05SCI: Made more fields of the Script class private. Some cleanup.Filippos Karapetis
2011-06-20ALL: Remove trailing whitespacesMax Horn
This tries to make our code a bit more compliant with our code formatting conventions. For future use, this is the command I used: git ls-files "*.cpp" "*.h" | xargs sed -i -e 's/[ \t]*$//'
2011-06-03SCI: Switch some char* to Common::String&Max Horn
2011-05-12GIT: Clean up: Suppress SVN tags, now uselessstrangerke
2011-03-28SCI: Renamed restAdjust to r_rest (like r_acc and r_prev)md5
2010-12-26SCI: A more efficient solution for bug #3037874 (SCI high CPU usage), which ↵Filippos Karapetis
will hopefully not clash with the speed throttler. This is a more proper fix for bug #3058865, and a partial fix for bug #3127824 svn-id: r55046
2010-12-22SCI: VMD video related changesFilippos Karapetis
- VMD videos are now properly started from the associated play subop of the kPlayVMD kernel call, and are now properly positioned on screen, and doubled only if the games require them to be - Added an enum for VMD video flags svn-id: r55003
2010-11-17SCI: Added some SCI3 selector related informationFilippos Karapetis
- Added a TODO for the usage of the -info- selector in kClone and kDisposeClone in SCI3 scripts, as it's no longer used in SCI3 - Added information about which of the selectors are missing in SCI3. There are some more which are missing, but aren't used in SCI2-SCI3 anyway - Some styling svn-id: r54291
2010-08-31SCI: adding workaround for platform-specificMartin Kiewitz
incompatibility with some sierra games. Some games open a new menu, set mouse cursor within that menu and expect the mouse cursor to be in there and will close it, if it's outside. In case of Wiimote/touch interfaces this logic won't work of course. Fixes island of dr. brain and QfG1VGA on Wii and touch-interface platforms svn-id: r52474
2010-08-29SCI: adding virtual lists for qfg-import roomsMartin Kiewitz
now lists import files of all possible games, adds game title before that, removes game prefixes for all files svn-id: r52441
2010-08-23SCI: storing game super class address now inside SciEngineMartin Kiewitz
svn-id: r52311
2010-07-19SCI: fix regression of r51027Martin Kiewitz
we have to reset the parser when switching vocabulary svn-id: r51031
2010-07-19SCI: implement foreign vocabulary supportMartin Kiewitz
not fully working, extended chars do not work currently as input svn-id: r51027
2010-07-12SCI: changing how savegame ids are handled internally. Using range 0-999 so ↵Martin Kiewitz
that scripts are able to signal us to create new slots, using range 1000-1999 for official slots. fixes lsl6 quicksave overwriting wrong save slots svn-id: r50831
2010-07-10SCI: calling speed throttler as well from kPalette(setIntensity) if needed - ↵Martin Kiewitz
fixes kq6 intro svn-id: r50794
2010-06-30SCI: Removed the FreeSCI music codeFilippos Karapetis
svn-id: r50532
2010-06-29SCI: Made the SoundCommandParser a member of the SciEngine class and removed ↵Filippos Karapetis
it from the EngineState, since it's static throughout the course of a game svn-id: r50484
2010-06-27SCI: Removed the hack for loading games from the launcher from run_vm(). ↵Filippos Karapetis
This is now done on startup. This should fix loading from the launcher for LSL6 svn-id: r50406
2010-06-23Moved the SelectorCache struct inside selector.h, where it belongs, and ↵Filippos Karapetis
fixed some header dependencies in the process svn-id: r50183
2010-06-17Strict mode: Changed several warnings due to logic bugs into errors. If an ↵Filippos Karapetis
error pops up from these ones, please add the game where it occurred and the steps to reproduce the error before turning it into a warning svn-id: r49973
2010-06-17SCI: Moved the event code a little bit around.Max Horn
* Move sleep() from EventManager to SciEngine * Rename EventManager methods: get -> getSciEvent, and getFromScummVM -> getScummVMEvent * Make scancode_rows static const * Turn altify & numlockify from EventManager methods into static functions (and comment out the currently unused numlockify) svn-id: r49959
2010-06-15Properly reconstruct the running stack when restoring (a regression from ↵Filippos Karapetis
commits #49376 and #49525), some formatting svn-id: r49689
2010-06-10Don't attempt to modify the printLang selector if it doesn't existFilippos Karapetis
svn-id: r49575
2010-06-10camelCase changesFilippos Karapetis
svn-id: r49570