Opened 12 years ago

Closed 12 years ago

Last modified 12 years ago

#6171 closed defect (fixed)

SCI: Camelot - Cannot parry with the 'Shift' button

Reported by: SF/captainjei Owned by: lskovlun
Priority: normal Component: Engine: SCI
Version: Keywords:
Cc: Game: Conquests of Camelot

Description

When fighting the Mad Monk at Glastonbury Tor, one is supposed to be able to use the spacebar to swing their sword, and the Shift button to block with their shield. On my most recent playthrough, the Shift button no longer makes the player block. I believe it used to work around ScummVM version 1.3.0 or so.

I attached a save game mid-fight with sword drawn. The sword and be sheathed and drawn again by pressing F8.

Current ScummVM version: 1.6.0git2021-g228785e (Oct 23 2012 14:36:49) Language: English Version: floppy, v1.001 Platform: Win32 on Windows 7

Ticket imported from: #3580473. Ticket imported from: bugs/6171.

Attachments (2)

camelot.003 (22.1 KB ) - added by SF/captainjei 12 years ago.
conquest1saves.zip (200.7 KB ) - added by SF/captainjei 12 years ago.

Download all attachments as: .zip

Change History (19)

by SF/captainjei, 12 years ago

Attachment: camelot.003 added

comment:1 by digitall, 12 years ago

captainjei: Thank you for the bug report. Can you please test this with previous versions of ScummVM i.e. v1.5.0, v1.4.1, v1.3.0 etc. and confirm when this problem was introduced? This wil greatly reduce the amount of work involved in bisecting for the cause of this bug.

comment:2 by bluegr, 12 years ago

I tried this up to version 1.3.1, and it doesn't work there either - I don't think this functionality ever worked in ScummVM. This is the only game that uses the shift key as an action key, and not as part of a key combination.

Currently, we filter out all events that are only made of modifier keys, such as control, shift and alt. To my knowledge, no other game checks for these keys directly, and they are only processed as part of key combinations.

I'm not sure how the game checks for the keypress of the shift key - I tried passing just the modifier key state without any keypress, but that didn't work. If I'm not mistaken, the game hardcodes the shift key to return a specific key code. Further investigation is required.

comment:3 by bluegr, 12 years ago

Some more information: script 912 handles the Use Sword / Parry actions. Script 910 handles the Draw / Sheath Sword actions.

These are invoked from script 0, ARTHUR::doit and ARTHUR::handleEvent. The key events come from script 996, the User object. At a first glance, there seems to be a check for the modifier keys there, but I haven't looked thoroughly.

comment:4 by bluegr, 12 years ago

Updated the title, as this never worked

comment:5 by bluegr, 12 years ago

Summary: SCI: Camelot - 'Shift' button no longer parriesSCI: Camelot - Cannot parry with the 'Shift' button

comment:6 by digitall, 12 years ago

captainjei: It would be useful if you can confirm if this has ever worked for you in an earlier version of ScummVM. Also, if you could try playing this game using the original SCI executable in DOSBox and see if the Shift Parry key works there, that would also be helpful. If you could post your results of this here, and attach an original interpreter savegame to allow us to compare the game state, that could help pin down the cause. Thanks.

comment:7 by SF/captainjei, 12 years ago

I'm no longer sure that if the Shift parry ever worked in ScummVM or not. I seem to remember it working, but that was years ago, so if you'd like me to, I can try older versions of ScummVM, though it looks like thebluegr has already done this for us.

It DEFINITELY works in DosBox. I can attach a savegame from a DosBox session, but it'll take a few days for me to have time to do so.

comment:8 by digitall, 12 years ago

Captainjei: Well, thebluegr went back to v1.3.1, but the SCI engine was added in v1.2.0, so you could try v1.2.0 and v1.2.1 at least.. To do anything earlier would require compiling your own builds from source code i.e. if your memory of it working is from a nightly build.

A few days delay is not too much problem, but the DOSBox savegame for replication and comparison would be very useful. thebluegr has already determined that the issue seems to be within the script states and it would be very useful to compare the original interpreter state with no bug with the ScummVM interpreter state with bug to see what differences are present. This would be using the debugger present in the original interpreter, see: http://sierrahelp.com/Cheats/DebugModes.html

comment:9 by SF/captainjei, 12 years ago

I'll get right on it. I know that I was using a stable build, because I didn't start installing daily snapshots until after 1.4.0 was released. I'll try 1.2.0 and 1.2.1 tonight, and I'll start a game in DosBox so I can get that save.

comment:10 by SF/captainjei, 12 years ago

Okay, I've confirmed that the Shift-parry does not work on ScummVM 1.2.0

comment:11 by SF/captainjei, 12 years ago

Okay, I saved a game at the monk battle while playing through DosBox. I didn't know if it would work to just attach the single save file, so I zipped all the saves I have for the game along with the *.dir file. When you load the game, load the one called 'parry!'

by SF/captainjei, 12 years ago

Attachment: conquest1saves.zip added

comment:12 by SF/captainjei, 12 years ago

The DosBox saves are in the file called conquest1saves.zip, by the way.

comment:13 by digitall, 12 years ago

captainjei: Thanks.. This should allow the SCI engine developers to compare the state between DOSBox and ScummVM fairly quickly without needing to replay to this point. Please be patient and standby...

comment:14 by digitall, 12 years ago

Owner: set to bluegr

comment:15 by lskovlun, 12 years ago

Resolution: fixed
Status: newclosed

comment:16 by bluegr, 12 years ago

Thanks for your report! This issue has been fixed by lskovlun in commit 8e733f03. The fix should be available in the next daily version.

comment:17 by bluegr, 12 years ago

Owner: changed from bluegr to lskovlun
Note: See TracTickets for help on using tickets.