Opened 22 years ago

Closed 22 years ago

Last modified 6 years ago

#7998 closed patch (wontfix)

o6_walkActorToObj() fix

Reported by: SF/painelf Owned by: fingolfin
Priority: normal Component: Engine: SCUMM
Version: Keywords:
Cc: Game: Sam and Max

Description

This fixes a walkbug in Sam and Max. The bug occurs in 'World of Fish' when Sam uses the bent spanner on the fiberglass fish. Sam walks to the side of the fish (correct movement), then starts walking upwards, and a few seconds later he's magically teleported back to the fish.

If you do a few debugs, you'll see that Sam is first asked to walk to obj 5 (the fish I assume), and when he get's there, to go to object 35 (no clue what that is). Object 35's x position is 0, hence the fix. The second walktoobj may be an error in the script itself, or in ScummVM script code.

The fix may of course affect other locations/games, but I have not been able to find any yet. I have added warnings to my local checkout for the specific conditions, so I'll hopefully track down other other occurences.

Ticket imported from: #590669. Ticket imported from: patches/103.

Attachments (2)

walktoobj.txt (620 bytes ) - added by SF/painelf 22 years ago.
The patch
samnmax.s26 (59.1 KB ) - added by SF/painelf 22 years ago.
Savegame (MacOSX, may have endian problems?)

Download all attachments as: .zip

Change History (6)

by SF/painelf, 22 years ago

Attachment: walktoobj.txt added

The patch

by SF/painelf, 22 years ago

Attachment: samnmax.s26 added

Savegame (MacOSX, may have endian problems?)

comment:1 by fingolfin, 22 years ago

The proper fix (at least over here) is to change this:

if (!a->isInCurrentRoom() || !a->isInCurrentRoom())

to this:

if (!a->isInCurrentRoom() || !a2->isInCurrentRoom())

Will put that into CVS shortly. I introduced it in rev 1.69 when I added the isInCurrentRoom() method.

comment:2 by fingolfin, 22 years ago

Owner: set to fingolfin
Resolution: wontfix
Status: newclosed

comment:3 by fingolfin, 22 years ago

The proper fix (at least over here) is to change this:

if (!a->isInCurrentRoom() || !a->isInCurrentRoom())

to this:

if (!a->isInCurrentRoom() || !a2->isInCurrentRoom())

Will put that into CVS shortly. I introduced it in rev 1.69 when I added the isInCurrentRoom() method.

comment:4 by digitall, 6 years ago

Component: Engine: SCUMM
Game: Sam and Max
Note: See TracTickets for help on using tickets.