aboutsummaryrefslogtreecommitdiff
path: root/engines/agi/agi.h
AgeCommit message (Collapse)Author
2017-02-24AGI: act on exitAllLogics in testIfCode (fixes bug #9707)Martin Kiewitz
Thanks waltervn for finding this one. Was a regression caused by the timer heuristic for detecting bad script code. When the heuristic identified being in an inner timer loop, it told ScummVM to sleep + process events. During that time a restore can get triggered by the user via GMM. When that happens, the restore is executed immediately. When still being inside testIfCode(), it may happen that execution goes beyond the end of the current logic incl. error/crash. TODO: maybe better change GMM as a whole for AGI, that restores are always processed in a delayed way after main loop got processed once?
2017-02-23AGI: Clean up VM opcode handlingMartin Kiewitz
so that invalid opcodes won't crash ScummVM anymore
2017-02-11AGI: Hold-key-mode fixMartin Kiewitz
Original AGI only created a stationary event, when the last pressed direction key was released. We do that now as well. Makes cursor in MH1 behave properly. Thanks to waltervn for pointing this out.
2016-10-12AGI: Make TIME_DELAY 0 to set the game to 40 fpsMartin Kiewitz
Original AGI TIME_DELAY 0 made the game run as fast as possible. We didn't go that far, but it still seems to run too fast. This should hopefully fix that. See bug #9607
2016-05-17ALL: Change main engine header guard defines to <directory>_<engine>_HEugene Sandulenko
Recently we started to use this as new semantics, although in the past we used simly <engine>_H. Now these guard defines are consistent with rest of the files which are used in the engines.
2016-04-13AGI: Move predictivedialog.h out of agi.hOri Avtalion
2016-02-28AGI: Set monitor VM var to EGA for Hercules renderingMartin Kiewitz
Original AGI Hercules rendering was restricted by the Hercules resolution, which is why they had to remove the AGI prompt and replace it with a prompt window like the one used in SCI. We are not and even when we support that prompt window, we will still support the original AGI prompt even for Hercules rendering. Maybe some games had special graphic code, when Hercules rendering is active. This needs to get checked. We are now telling the scripts that we are running on EGA, so that they don't put text at different coordinates. Hercules rendering also used a different grid for putting text for example Space Quest 2 right at the start. This change avoids problems with such placement. We don't really want to restrict ourselves by implementing that different text grid resolution. Also added comments on game feature flags.
2016-02-27AGI: Add support for upscaling and Hercules hires fontMartin Kiewitz
- User option to force Hercules hires font for any rendering mode - Also change mouse cursor hotspots from 1,1 to 0,0 - Fix inaccuracy in mouse controlled game menu - Change render_Block(), drawBox(), drawDisplayRect() to use upper Y instead of lower Y. Original AGI uses lower Y, but upper Y makes upscaling way easier.
2016-02-20AGI: Add detection for fan games with broken volume bug #7035Martin Kiewitz
Plenty of fan games set volume to mute, because they thought 15 would be loudest. It's in fact "mute" in AGI. Those games were made primarily for PC AGI, which did not use the volume setting. We do, so such games would get muted audio. We try to detect such games. Hopefully fully fixes bug #7035. Too many games to try them all out.
2016-02-19AGI: Add detection+workaround for endofloop+motion at the same timeMartin Kiewitz
Detects when end.of.loop + motions are used on the same screen object at the same time, which would have resulted in flag corruption in the original interpreter. We detect this situation now, show a warning and disable the cycler in case cycler was activated first. This solves a new issue in kq1, when grabbing the eagle in room 22, that was previously hidden just like in the original AGI. Fixes bug #7046
2016-02-16AGI: Change how VM timer vars are handledMartin Kiewitz
Instead of directly converting play time to VM timer vars, we only adjust VM timer vars according to play time seconds delta. This is needed for at least Mixed Up Mother Goose. The game sets the VM "second" variable to 0 and then uses it for syncing the text to the songs. We even adjust second calculation, so that the timing should always be the same and not depend on basically luck (seconds may wrap right after setting it, because internal cycles counter is not changed).
2016-02-14AGI: Changes to vm var seconds heuristic (delay loop detection)Martin Kiewitz
- small fix (forgot to reset the hit counter) - rename methods - added more information about PQ1 in comment
2016-02-14AGI: Add heuristic to detect delay loops within scriptsMartin Kiewitz
And in that case poll events, delay for a few milliseconds and update screen. This somewhat worked before the graphics rewrite because of a timer hack. This one tries to detect actual inner loops. Happens in at least Police Quest 1 when playing poker.
2016-02-13AGI: Adding seconds of current time to saved gamesMartin Kiewitz
Useful to properly detect the most recent saved game (that's done by the original save/restore dialogs)
2016-02-11AGI: Rename nonBlockingText -> artificialDelayMartin Kiewitz
Also add a table for Apple IIgs games for music issues like in PQ1 intro, where the developers thought that loading a new room would take X amount of time and they started loading before the music was done. In our AGI music may get cut off because of this. It of course also happens, when using the original interpreter, as soon as you emulate a faster processor. Which means this is also a workaround. See bug #7026
2016-02-04AGI: Fix Hold-Key-Mode implementationMartin Kiewitz
Hold-Key-Mode got introduced v2.425, it was simply not possible to disable it until 3.098. Now creating a AGI_KEY_STATIONARY event, so that it works properly Fixes Mixed Up Mother Goose
2016-02-04AGI: Add Apple IIgs system UI buttonsMartin Kiewitz
For Restart/Quit/Pause dialog
2016-02-03AGI: Rename WINDOWRESET to WINDOW_AUTO_CLOSE_TIMERMartin Kiewitz
2016-02-03AGI: Remove unused initialized variableMartin Kiewitz
2016-02-03AGI: Remove _game.state, not needed anymoreMartin Kiewitz
2016-02-03AGI: Change cycle delay handling, seems to fix GRMartin Kiewitz
Removed pollTimer() Renamed pause() to wait() Doing 10 msec delays instead of at least 50 msec per EventProcess Seems to fix weird Gold Rush ingame timer issue?! bug #4147
2016-02-03AGI: Cycle event processing changedMartin Kiewitz
processEvents() renamed to processScummVMEvents() mainCycle() renamed to processAGIEvents() have.key now sets up an inner loop and calls processAGIEvents() to avoid any further cycle work processing
2016-02-03AGI: Implement messageBox() as inner loopMartin Kiewitz
Also remove _game.keypress, _game.msgBoxTicks
2016-02-03AGI: Fix regression of have.key changesMartin Kiewitz
original commit 8269a94bcd55200f7ae8aba00c7b6fd0d37b9a37 Now hopefully properly implemented. Adjusted a few more inaccuracies (we set v19 to 0, where we shouldn't have)
2016-02-02AGI: Remove inputMode, not needed anyoreMartin Kiewitz
2016-02-02AGI: Use inner loop functionality for have.keyMartin Kiewitz
Also do it like the original interpreter did it
2016-02-02AGI: Fix formatting.Johannes Schickel
This mostly enforces tabs for indentation and spaces for formatting. But also fixes spaces on empty lines, some extra/missing spaces. astyle + manual fixup
2016-02-02AGI: mouse support for menuMartin Kiewitz
2016-02-01AGI: change how menus are triggered on Non-PCMartin Kiewitz
2016-02-01AGI: Pass vm pointer directly to commandsMartin Kiewitz
No functional change
2016-02-01AGI: Rename _game.lognum to _game.curLogicNrMartin Kiewitz
Also a bit of cleanup
2016-02-01AGI: Change _game.exitAllLogics to booleanMartin Kiewitz
2016-02-01AGI: Remove _game.hasPrompt, no longer neededMartin Kiewitz
2016-02-01AGI: Remove old clockEnabled booleanMartin Kiewitz
No longer needed We use ScummVM system total play time functionality instead
2016-02-01AGI: implement predictive dialogMartin Kiewitz
2016-01-31AGI: Fix warningWillem Jan Palenstijn
2016-01-31AGI: vol system setting gets sent to scriptsMartin Kiewitz
Volume changes in ScummVM system menu now gets sent to scripts as well.
2016-01-31AGI: properly implement volume control + syncMartin Kiewitz
Original code did assume that AGI volume level is 0-15 (0 for silence, 15 for maximum volume). It actually is the other way. 0 is maximum, 15 is silence. Fixed that. Also implemented sync with ScummVM settings dialog. In case "mute" is enabled by the user, any volume changes done by scripts are ignored. Fixes Manhunter 1 Apple IIgs not getting sound anymore since the VM Var cleanup (the script volume change by the scripts didn't reach us before)
2016-01-31AGI: remove timer hack, implement in game timerMartin Kiewitz
in game timer is now updated, when scripts read in game timer VM variables and during main loop. ScummVM total play time feature is used for it. Game cycle syncing is done at the same time.
2016-01-31AGI: adjust getFlag(), setVar() and getVar()Martin Kiewitz
2016-01-31AGI: getflag/setflag/etc. cleanupMartin Kiewitz
renamed getflag() to getFlag() renamed setflag() to setFlag() renamed flipflag() to flipFlag() preagi: renamed setFlag for this engine to setWinnieFlag
2016-01-31AGI: VM Var code cleanupMartin Kiewitz
Don't access variables directly, but through method Shouldn't include any functional differences Also changed several hardcoded values to the corresponding enums.
2016-01-31AGI: copying between var + ego screen obj fixedMartin Kiewitz
We copied the wrong way see cycle.cpp This fixes the fan game 13th disciple. bug #3563 Also cleanup playercontrol variable is now a boolean
2016-01-29AGI: new font class createdMartin Kiewitz
moved font stuff into GfxFont class removed Mickey Mouse font data (is loaded from mickey.exe)
2016-01-29AGI: use Common::RenderMode instead of its ownMartin Kiewitz
AppleIIgs + Atari ST weren't available back then in the enum. They now are, so I can use the Common one.
2016-01-29AGI: graphics rewrite + cleanupMartin Kiewitz
- graphics code fully rewritten - Apple IIgs font support - Amiga Topaz support - Word parser rewritten - menu code rewritten - removed forced 2 second delay on all room changes replaced with heuristic to detect situations, where it's required - lots of naming cleanup - new console commands show_map, screenobj, vmvars and vmflags - all sorts of hacks/workarounds removed - added SCI wait mouse cursor - added Apple IIgs mouse cursor - added Atari ST mouse cursor - added Amiga/Apple IIgs transition - added Atari ST transition - user can select another render mode and use Apple IIgs palette + transition for PC versions - inventory screen rewritten - SetSimple command now properly implemented - PreAGI Mickey: Sierra logo now shown - saved games: now saving controller key mapping also saving automatic save data (SetSimple command) - fixed invalid memory access when saving games (31 bytes were saved using Common::String c_ptr() Special Thanks to: - fuzzie for helping out with the Apple IIgs font + valgrind - eriktorbjorn for helping out with valgrind - LordHoto for figuring out the code, that caused invalid memory access in the original code, when saving a game - sev for help out with reversing the Amiga transition currently missing: - mouse support for menu - mouse support for system dialogs - predictive dialog support
2015-05-19AGI: implement original sierra font, fix bug #6405Martin Kiewitz
custom font is still used for fanmade games i cannot test preAGI games, because I don't own those.
2015-05-15AGI: implement engine option to disable mouseMartin Kiewitz
engine option gets disabled for all Amiga games also disabled for certain fanmade games, which require a mouse. defaults to enabled mouse Engine options are not shown for previously detected games until those games get redetected If there is a way to handle those cases, please fix.
2014-02-18AGI: Make GPL headers consistent in themselves.Johannes Schickel
2013-05-11AGI: Fix bug #3600733 - "AGI FANMADE: function slowing down game"Filippos Karapetis
We now only test for events in testKeypressed() without updating the game cycle at all (NAGI doesn't update the game cycle either). This fixes the slowdowns in some animations where have.key() is issued, like Manannan's lightnings in the intro of KQ3 and the bullets in the intro of PQ1