Commit Graph

1323 Commits

Author SHA1 Message Date
Martin Kiewitz
962e32e0ec AGI: Remove comma from "Pause when entering commands" 2016-02-28 15:57:22 +01:00
Martin Kiewitz
e6466b20fa AGI: Add optional "pause, when entering commands" feature
Shows a prompt window and pauses the game (just like original AGI
did, but original AGI only did it in Hercules rendering mode).
2016-02-28 15:50:25 +01:00
Torbjörn Andersson
9d4216e158 AGI: Fix small memory leak in Hercules font loader 2016-02-28 14:34:22 +01:00
Martin Kiewitz
0caef5d8d0 AGI: Set monitor VM var to EGA for Hercules rendering
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-28 14:06:22 +01:00
Martin Kiewitz
953c26cbf6 AGI: Disable font loading from HGC_GRAF.OVL (AGI3)
It seems Sierra basically put a low res font in there, so
it's useless. We should rather directly use the PC BIOS font
in those cases. The code could be useful at some point in case
we add support for the AGI3 Hercules rendering, although I think
it looks worse, because graphics are basically "compressed".
2016-02-28 11:56:48 +01:00
Martin Kiewitz
7a169c90f6 AGI: Hercules rendering for game screen 2016-02-28 11:23:31 +01:00
Martin Kiewitz
e1c36a52b5 AGI: Add support for upscaling and Hercules hires font
- 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-27 21:44:21 +01:00
Johannes Schickel
f3f37af61b AGI: Let listSaves return list sorted on slot numbers. 2016-02-25 21:39:45 +01:00
Martin Kiewitz
fb007a5914 AGI: Add detection for 13th Disciple 1.01 bug #7010 2016-02-25 18:16:01 +01:00
Martin Kiewitz
4ad1bbf108 AGI: Add detection for fan games with broken volume bug #7035
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-20 14:53:17 +01:00
Martin Kiewitz
29456da421 AGI: Added comments about Black Cauldron+KQ2, removed warning
Also removed old comments about testing needed for IIgs
Also removed warning when game speed is overwritten for IIgs,
b/c all games were tested and should run properly now.
2016-02-20 13:17:16 +01:00
Martin Kiewitz
327ba19d4a AGI: Comment about another artificial delay situation
Gold Rush, Stagecoach path, after solving steep hill
2016-02-19 16:24:58 +01:00
Martin Kiewitz
4a204af5b7 AGI: Fix a tiny inaccuracy in string word wrapper
Fixes one message box in Gold Rush during Stagecoach path,
that wasn't wrapped correctly.
2016-02-19 15:56:00 +01:00
Martin Kiewitz
453a8ac11d AGI: Add artificial delay for GR stagecoach path 2016-02-19 15:28:34 +01:00
Martin Kiewitz
22522196f4 AGI: Slightly change artificial delay to detect GR mule
Now also detects the text, that is shown when following your
mule in Gold Rush!
2016-02-19 12:52:19 +01:00
Martin Kiewitz
dd83d7a544 AGI: Fix comment about end.of.loop/motion 2016-02-19 10:38:24 +01:00
Martin Kiewitz
5484f0bc58 AGI: Add detection+workaround for endofloop+motion at the same time
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-19 10:34:37 +01:00
Martin Kiewitz
cca9fc918f AGI: Save screen object loop_flag
loop_flag was previously vt.parm1, which was shared for multiple
uses. Was split up during graphics rewrite in commit
8a595e7771

Is indirectly part of bug #7046. Saving, restarting ScummVM and
restoring right after grabbing the eagle resulted in the glitch
not happening (which was of course an inaccuracy anyway). This
was caused by AGI currently not saving/restoring the loop_flag.
Needs to get further figured out what's exactly happening
internally and if this issue was just hidden by the shared
vt.parm1 in previous versions. If triggered, it would have
just set another pseudo-random flag on end-of-loop.
2016-02-19 02:00:35 +01:00
Eugene Sandulenko
1a542ae82c AGI: Add missed comma 2016-02-18 17:43:38 +01:00
Martin Kiewitz
ed92ccde23 AGI: Apple IIgs time delay override MH1 completed
+ Disable hide.mouse for MH1 Apple IIgs
2016-02-18 16:55:49 +01:00
Martin Kiewitz
4d85aa193c AGI: Apple IIgs time delay override KQ4 completed 2016-02-18 02:01:51 +01:00
Martin Kiewitz
736d7cd533 AGI: Make SQ2 Apple IIgs get a AGI 2.917 equivalent and not 2.936
Solves the priority issues at the end, because the set.pri.base
call is now rejected by us. The IIgs interpreter seems to feature
177 kernel calls, but the last few are not what we expect them to
be. It seems set.pri.base was discard.sound for this interpreter.
It seems it was cleaned up for kq4. That one actually uses
dynamic priority bands and it's working properly.

Fixes bug #7034
2016-02-17 21:40:37 +01:00
Martin Kiewitz
a8ede10863 AGI: Added comment about artificial delay sq2 scene 2016-02-16 19:27:37 +01:00
Martin Kiewitz
591e0522b9 AGI: Set.pri.base comments added (Apple IIgs KQ3+SQ2)
For KQ3 the calls are currently blocked b/c interpreter version
For SQ2 they aren't, which causes a few priority issues at the end
2016-02-16 16:51:43 +01:00
Martin Kiewitz
b31990246e AGI: Added console command to disable automatic saves
Helps creating various saved games for Mixed Up Mother Goose
2016-02-16 05:36:53 +01:00
Martin Kiewitz
562649c7c0 AGI: Change how VM timer vars are handled
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-16 03:18:10 +01:00
Martin Kiewitz
873ba15b66 AGI: Changes to vm var seconds heuristic (delay loop detection)
- small fix (forgot to reset the hit counter)
- rename methods
- added more information about PQ1 in comment
2016-02-14 23:05:28 +01:00
Martin Kiewitz
7b75936f56 AGI: Add heuristic to detect delay loops within scripts
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-14 22:43:52 +01:00
Martin Kiewitz
8eefa4e2b5 AGI: Added a few comments about KQ1
set.simple gets called when killing the witch + planting beans
Right after bowing to the king, ego faces away from him. This
issue was already present in 1.7.0. Could probably get solved
later via script patcher.
2016-02-14 15:17:57 +01:00
Martin Kiewitz
e24fbf7d6e AGI: Fix another comment about dynamic priority table
Available also in 2.425, then removed until 2.936, yada yada.
priorityToY-Glitch is definitely present in 2.425 as well.
2016-02-14 02:06:50 +01:00
Martin Kiewitz
9a9ddc777e AGI: set.pri.base was actually available in AGI2.425
Was available only in 2.425 and in 2.936+.
Fixing comment accordingly. Also allowing the command for 2.425.
2016-02-14 02:01:28 +01:00
Martin Kiewitz
b727e8da08 AGI: Fix new createDefaultPriorityTable() code 2016-02-13 21:16:32 +01:00
Martin Kiewitz
9f59b5ed7c AGI: Fix priority band handling
- Fix saving/loading priority bands table. Now saving the actual raw
  data
- Now also saving the flag, that defines if the priority table got
  modified by scripts
- For older saved games it will try to figure out the state of that
  flag
- Blocking set.pri.base for AGI below 2.936
- set.pri.base was actually introduced in 2.936 and not AGI3
- The set.pri.base bug was present in 2.936 as well
- Saved games created between the graphics rewrite and this
  commit may have priority issues for games, that used AGI2.936+
2016-02-13 20:42:30 +01:00
Martin Kiewitz
627e6393d6 AGI: Add another situation that needs artificial delay
Comment only
SQ1, right at the end of the asteroids
2016-02-13 15:48:55 +01:00
Martin Kiewitz
350aeec6bb AGI: Apple IIgs time delay override SQ1 completed 2016-02-13 14:55:09 +01:00
Martin Kiewitz
e49658cf81 AGI: Adding seconds of current time to saved games
Useful to properly detect the most recent saved game
(that's done by the original save/restore dialogs)
2016-02-13 13:40:47 +01:00
Martin Kiewitz
02d00cb17f AGI: Apple IIgs time delay override KQ4 data added 2016-02-13 04:19:26 +01:00
Martin Kiewitz
82c3bdc142 AGI: Apple IIgs time delay override SQ2 data added 2016-02-13 04:07:17 +01:00
Martin Kiewitz
af90283552 AGI: Add time delay overwrite for AppleIIgs
Should somewhat fix bug #7026
Needs testing (although AGI games need to get tested for 1.8.0 anyway)
2016-02-13 00:10:43 +01:00
Martin Kiewitz
dbea55b36b AGI: Rename nonBlockingText -> artificialDelay
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-11 17:26:25 +01:00
Martin Kiewitz
808d622ed5 AGI: Remove unused method 2016-02-10 20:14:02 +01:00
Martin Kiewitz
ccf328d725 AGI: Cleanup 2016-02-10 19:54:03 +01:00
Martin Kiewitz
b443ac7b95 AGI: Init video before font + text init 2016-02-10 18:48:53 +01:00
Martin Kiewitz
fb90140bee AGI: Use special Apple IIgs SQ1 palette for SQ1
Was already documented inside palette.h, but wasn't used yet
2016-02-09 22:58:28 +01:00
Martin Kiewitz
7807bcb76b AGI: Fix warning 2016-02-09 20:22:06 +01:00
Martin Kiewitz
3416f67b89 AGI: Fix invalid coordinate warnings for sprites 2016-02-09 19:56:13 +01:00
Martin Kiewitz
78905e0ab6 AGI: Only set VAR_KEY,when no controller/direction
Fixes Mixed Up Mother Goose Apple IIgs save/restore prompt
2016-02-09 19:41:59 +01:00
Martin Kiewitz
73cf4a80e8 AGI: Hold-Key: only send stationary for directions 2016-02-09 19:34:50 +01:00
Martin Kiewitz
142de4fffb AGI: Fix skip auto-save slot code for auto-save 2016-02-09 19:20:57 +01:00
Martin Kiewitz
587c1ad310 AGI: Check xPos/yPos when building sprite lists
And ignore sprites, that are placed outside of visual screen
Fixes memory corruption during intro of fan made Get Outta SQ game.
Original AGI did not do checks at all.
2016-02-09 17:37:28 +01:00
Martin Kiewitz
ab22c27f7a AGI: Cut menu in case menu names are too long
Required for games that add to many names or add names, that are
too long. The code needs to get adjusted anyway for different
platforms, so for now just cut the menu names instead
Required for at least the fan game Get Outta Space Quest
2016-02-09 14:54:46 +01:00
Martin Kiewitz
c26d3fd62f AGI: Change set.simple string copy code 2016-02-09 13:51:14 +01:00
Martin Kiewitz
f5a83adc01 AGI: Fix various CIDs
CID 1350104: regression from graphics rewrite in C64 picture drawing
CID 1350101: potential buffer overflow in set.simple command
CID 1350112: uninitialized variable in TextMgr
CID 1350113: false positive uninitialized variable in SystemUI
CID 1350114: potentially uninitialized variable in IIgsSample
CID 1350117: false positive uninitialized variable in InventoryMgr
CID 1350103: code bug in CGA rendering TextMgr::charAttrib_Set()
CID 1350109: false positive in GfxFont::loadFontAmigaPseudoTopaz()
CID 1350111: original AGI uninitialized memory issue
             in SpritesMgr::showObject
2016-02-09 12:47:45 +01:00
Martin Kiewitz
5e67457553 AGI: Resource checking for setView/setLoop/setCel
Also loading view resources in case they are not loaded on set.view
Fixes crash in Larry 1 for Apple IIgs after getting beaten up
by taxi driver (was an original game bug). Even makes it work now.
Original interpreter closed down in this situation.
For setLoop() and setCel() error()s were added for this case
to avoid crashes.
Also: screenObj->viewData renamed to screenObj->viewResource
2016-02-07 19:59:23 +01:00
Martin Kiewitz
e155e1bfa9 AGI: Stop set.simple getting called for <2.425
Also stop it from getting called by 2.440 AGI.
Was implemented for 2.425, removed in 2.440 and re-added
in 2.917.
The opcode is called after answering the phone at the store
(555-6969) in Apple IIgs Larry. It can't be automatic saving.
See script 22, line 678 in AGI Studio.
Stops automatic saving getting enabled for Larry 1 Apple IIgs.
Also added warning messages to other commands as well.
2016-02-07 18:05:51 +01:00
Martin Kiewitz
d836a52557 AGI: Do not set TIME_DELAY at all on restart
Original AGI did not do it and it would ruin the game speed of
at least Larry on Apple IIgs after dying.
2016-02-07 01:10:38 +01:00
Martin Kiewitz
c43ee3a7a5 AGI: Fix regression from stringWordWrap rewrite
Space at the end of the string was handled inaccurately
Fixes kq1 text scrolling bug #7021
Rewrite was done in commit efb6532468
2016-02-07 00:24:11 +01:00
Martin Kiewitz
2b216e1494 AGI: Move debugger to Ctrl-Shift-D
because of Police Quest 1 using Ctrl-D for calling dispatch.
Solves FR #395
2016-02-06 03:00:20 +01:00
Martin Kiewitz
bb9052bf6f AGI: Switch to CLUT3 for Macintosh as default 2016-02-06 00:03:17 +01:00
Martin Kiewitz
088c4d118c AGI: Adding Macintosh palettes for GR+SQ2
But not actually using the GR palette, because it looks horrible.
2016-02-05 23:53:26 +01:00
Martin Kiewitz
eaf0aeb604 AGI: Make it possible to also force CGA/EGA/VGA
...rendering
2016-02-05 22:09:11 +01:00
Martin Kiewitz
a7ffda3ba1 AGI: fix build powf() -> pow() 2016-02-05 17:03:38 +01:00
Martin Kiewitz
f09a15f276 AGI: Render mode Macintosh added
Palette + mouse cursor + box frame color only atm
Thanks to wjp for gamma correction
Not sure, if our current color adjustment is correct
Should be checked by using actual hardware
2016-02-05 16:41:02 +01:00
Martin Kiewitz
f954603f8d AGI: GfxMgr::drawBox now using kRenderMacintosh 2016-02-05 14:23:23 +01:00
Martin Kiewitz
efb6532468 AGI: Rewrote stringWordWrap()
Original code wasn't accurate
2016-02-05 14:13:45 +01:00
Martin Kiewitz
72a3cae20b AGI: Restrict hide.mouse to AGI3 only
Command seems to not have existed in at least 2.917 (PC).
Space Quest 2 on Apple IIgs calls it during intro, but never
calls show.mouse. SQ2 on other platforms does not make this call.
Mouse cursor is not hidden under emulator, so atm I have to assume
that it's either a dodgy script or there was something else hacked
into the interpreter back then.

This fixes Space Quest 2 Apple IIgs losing mouse cursor, when
the intro is not canceled.
2016-02-04 23:24:59 +01:00
Martin Kiewitz
4b7d49dcff AGI: Fix Hold-Key-Mode implementation
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-04 22:53:15 +01:00
Martin Kiewitz
9f7ff8351b AGI: Fix mouse code for transitions
Do not show mouse cursor after transition, when it's currently
switched to hidden. Do the same for hide/show.mouse opcodes.
2016-02-04 21:21:52 +01:00
Martin Kiewitz
26791ec7d9 AGI: Add verbose flags to debug command screenobj 2016-02-04 18:49:15 +01:00
Martin Kiewitz
240982a46e AGI: Fix cursor position after save game descr.
Cursor was placed incorrectly after entering saved game description
using original load/save dialogs.
2016-02-04 17:22:23 +01:00
Martin Kiewitz
af8dbfc998 AGI: More accurate menu mouse support
Menu items did not switch to inverted state when they are disabled.
2016-02-04 16:42:41 +01:00
Martin Kiewitz
9620979def AGI: Add Atari ST system UI buttons 2016-02-04 15:30:50 +01:00
Martin Kiewitz
db03baed02 AGI: Add buttons to save/restore verify dialogs 2016-02-04 13:58:10 +01:00
Martin Kiewitz
c17cd72bae AGI: Add Amiga system UI buttons
Also adjust window frames for Amiga. Amiga also uses hi-res ones.
2016-02-04 13:38:18 +01:00
Martin Kiewitz
e019323f07 AGI: Add Apple IIgs system UI buttons
For Restart/Quit/Pause dialog
2016-02-04 12:51:35 +01:00
Martin Kiewitz
dbdf77660e AGI: Fix disabled look to work properly in menus 2016-02-04 00:55:53 +01:00
Martin Kiewitz
f6c9cffa26 AGI: Add different window frames for Macintosh
Also work on drawCharacter code for SystemUI usage
2016-02-03 22:47:58 +01:00
Martin Kiewitz
0f026c7766 AGI: Add different window frames for Apple IIgs
Only slightly different than on PC
2016-02-03 22:25:52 +01:00
Martin Kiewitz
a9bb8c3a50 AGI: Message box mouse support 2016-02-03 08:27:44 +01:00
Martin Kiewitz
d23871fdd8 AGI: Rename WINDOWRESET to WINDOW_AUTO_CLOSE_TIMER 2016-02-03 04:17:15 +01:00
Martin Kiewitz
3eebf2eb41 AGI: Increase time delay for Apple IIgs
It seems that either Apple IIgs ran very slowly or that its
AGI interpreter didn't do the delays as on all the other platforms.
Further investigation needed
Fixes all sorts of games running now way too fast.
2016-02-03 03:49:37 +01:00
Martin Kiewitz
9a3454393b AGI: Remove unused initialized variable 2016-02-03 03:13:25 +01:00
Martin Kiewitz
cc55cb13d3 AGI: Remove _game.state, not needed anymore 2016-02-03 03:07:50 +01:00
Martin Kiewitz
34117170f2 AGI: Change cycle delay handling, seems to fix GR
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-03 02:40:01 +01:00
Martin Kiewitz
778c1ddb69 AGI: Cycle event processing changed
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-03 02:21:07 +01:00
Martin Kiewitz
c2038e00d0 AGI: Call update screen in have.key for now
Some games call it in an endless loop until a key is returned
2016-02-03 01:47:26 +01:00
Martin Kiewitz
702b66a49d AGI: Make inner loop handlers consistent 2016-02-03 01:41:32 +01:00
Martin Kiewitz
8271058a45 AGI: Implement messageBox() as inner loop
Also remove _game.keypress, _game.msgBoxTicks
2016-02-03 01:32:57 +01:00
Martin Kiewitz
9fecbe58a1 AGI: Remove Gold Rush workaround, no longer needed 2016-02-03 01:03:40 +01:00
Martin Kiewitz
563d890991 AGI: Fix regression of have.key changes
original commit 8269a94bcd
Now hopefully properly implemented.
Adjusted a few more inaccuracies
(we set v19 to 0, where we shouldn't have)
2016-02-03 00:26:35 +01:00
Martin Kiewitz
920bea0fd9 AGI: add drawCharacterOnDisplay() 2016-02-02 23:27:13 +01:00
Martin Kiewitz
5f41a09701 AGI: Remove inputMode, not needed anyore 2016-02-02 23:02:50 +01:00
Martin Kiewitz
cdc6a2f3c3 AGI: test commands cleanup 2016-02-02 22:41:01 +01:00
Martin Kiewitz
8269a94bcd AGI: Use inner loop functionality for have.key
Also do it like the original interpreter did it
2016-02-02 22:26:39 +01:00
Martin Kiewitz
8a29f98c9c AGI: Don't pause in game timer while in menus
Original interpreter did not do it and we paused music/sfx,
which the original interpreter also didn't do.
Shouldn't cause issues.
2016-02-02 21:28:47 +01:00
Martin Kiewitz
5cd7ad8622 AGI: code formatting 2016-02-02 20:41:11 +01:00
Johannes Schickel
6778175f6d AGI: Fix formatting.
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-02 20:15:18 +01:00
Martin Kiewitz
9ad3712aa3 AGI: Add WORKAROUND comment to "render after menu"
see commit 0b75bf3721
Original AGI did not do, what we are doing now
2016-02-02 19:58:55 +01:00
Martin Kiewitz
223ce70eab AGI: Don't use status row for menu mouse trigger
Use hardcoded first line instead
In Donald Duck the status line is at line 24, but also hidden
2016-02-02 17:47:17 +01:00
Martin Kiewitz
0b75bf3721 AGI: Render after menu, when playarea starts at 0
Fixes graphics glitch for Donald Duck
2016-02-02 17:44:53 +01:00