aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/state.h
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: 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.
2016-09-29SCI: Deduplicate call origin formattingColin Snover
2016-09-29SCI32: Start implementing kSave for SCI32Colin 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-10SCI32: Implement kPlayVMDColin 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-05SCI: Make cursor workaround work properly on OpenPandoraMartin Kiewitz
Other platforms, that support analog stick + touch screen at the same time, are possibly also affected. Cursor workarounds exist for qfg1vga, qfg3, lsl5 and Island of Dr. Brain. Those sometimes worked and sometimes didn't on at least OpenPandora and should be fixed now.
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-02-05SCI: Blocking ScummVM auto-save slot 0 for savingMartin Kiewitz
Auto-saving is not used by SCI, but slot 0 is ScummVM "standard" for auto-saving, that's why it's not available for saving anymore. Jones still uses slot 0 for saving/restoring (because it's hardcoded and changing it would break it somewhat) Deleting + restoring is still possible of couse.
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-02-18SCI: Make GPL headers consistent in themselves.Johannes Schickel
2013-04-27SCI: Change wording for bug/further info referencesFilippos Karapetis
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: Move all file-related functions in file.*Filippos Karapetis
This way, there is a clear separation of the actual SCI kernel file functions and the file classes and wrappers of ScummVM
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-05-12GIT: Clean up: Suppress SVN tags, now uselessstrangerke
2011-04-28JANITORIAL: Format forward declarations to follow conventionOri Avtalion
2011-03-28SCI: Renamed restAdjust to r_rest (like r_acc and r_prev)md5
2011-03-18SCI: Remove unused MAX_SAVE_DIR_SIZEMax Horn
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: Also reset flags when resetting the video stateFilippos Karapetis
svn-id: r55007
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-10-31SCI: Play time related changesFilippos Karapetis
- Added support for savegame play time - Removed obsolete variables for calculating the play time (EngineState::gameStartTime and Console::_enterTime) - Renamed some variables to camelCase svn-id: r53974
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: some work on replacing sierra restore dialogMartin Kiewitz
svn-id: r52305
2010-08-23SCI: multiple changes for mother goose vgaMartin Kiewitz
which is sci1 and sci1.1 fixes bug #3051145 - separating this mother goose from ega and sci2.1 - adding workaround when restoring saved games in these games, games try to calculate restored savedgameid instead of looking it up, we patch this code out and also set the global to the current savedgameid - adding workaround for scripts checking savedgameid to be below 13 (our savedgameids begin at 100 now) - changing official range for savedgameids from 1000->1999 to 100->199, otherwise mother goose would have required much larger patches and this range should be fine even if we replace savedgame dialogs later svn-id: r52301
2010-07-31SCI: kGameIsRestarting returns 2 when we restoredMartin Kiewitz
fixes castle of dr. brain save issue in puzzle room, fixes island of dr. brain save issue when saving in first room svn-id: r51538
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-14SCI: Limit the screen refresh rate to 60fpsFilippos Karapetis
svn-id: r49647
2010-06-10camelCase changesFilippos Karapetis
svn-id: r49570
2010-06-10Resolved a FIXME with getSciLanguage(), by creating a separate setter. Also, ↵Filippos Karapetis
some camelCase changes svn-id: r49568
2010-06-10Removed the pointer to the game object from the EngineState classFilippos Karapetis
svn-id: r49562
2010-06-09Globals from script 0 are now initialized in script_init_engine(), and are ↵Filippos Karapetis
accessed from the relevant variables pointer. Removed direct reference to script 0 from the engine state svn-id: r49536
2010-06-09Renamed the SciEvent class to EventManager, to separate it from the sciEvent ↵Filippos Karapetis
structure, and removed it from the engine state svn-id: r49534
2010-06-09Merged restAdjust and restAdjustCur, as we don't save the restAdjust ↵Filippos Karapetis
modifier inside saved games (rightfully so). Also, the segment manager is now reset inside the main loop, when the game is restarted, not in game_exit() svn-id: r49533
2010-06-08Merged the restarting_flags, script_abort_flag, and restoring members of the ↵Filippos Karapetis
EngineState class into one variable, abortScriptProcessing. The flag kept to signify a game restart has been placed in a boolean, gameWasRestarted svn-id: r49518