Opened 7 years ago

Closed 2 years ago

#6097 closed defect (fixed)

PUTTZOO: Raft disappearing

Reported by: SF/legoking831 Owned by: BenCastricum
Priority: normal Component: Engine: SCUMM
Keywords: original Cc:
Game: Putt-Putt Saves the Zoo

Description

ScummVM version: 1.50pre11-g382f554
Bug details: This bug occurs in the original and in ScummVM. To my knowledge, it only occurs in the 1999 re-release of the game (Yeah, seriously, they CREATED a bug in a re-release. Figure that one out). The MAXS has a size of 46, so I don't know which engine it runs on. I have attached a save game below. Extract those two files out of the zip and place them into your save directory. Now, when you open the save file (Press L during gameplay), just click on the land on Putt-Putt's right (not your right, his). He should start talking. Now skip it using escape. When you do this, the raft disappears and you have no way of getting it back. Since you couldn't have possibly done anything else by this point, you're stuck and have to restart, making this game-breaking.
Version: Windows Updated/English
Platform: Win32

Ticket imported from: #3541803. Ticket imported from: bugs/6097.

Attachments (4)

puttzoo.zip (52.5 KB ) - added by SF/legoking831 7 years ago.
The save files for this bug.
puttzoo.diff (1.1 KB ) - added by Kirben 5 years ago.
puttzoo_v2.diff (1.1 KB ) - added by BenCastricum 5 years ago.
puttzoo_v3.diff (1.1 KB ) - added by Kirben 5 years ago.

Download all attachments as: .zip

Change History (16)

by SF/legoking831, 7 years ago

Attachment: puttzoo.zip added

The save files for this bug.

comment:1 by SF/polinenibharat, 7 years ago

Hi can you assign this bug to me. I want to look into it.

comment:2 by wjp, 7 years ago

That's much appreciated. We don't really formally assign bugs to people, but you can report your findings here.

comment:3 by lordhoto, 7 years ago

Summary: SCUMM: Raft disappearing in PuttzooPUTTZOO: Raft disappearing

comment:4 by BenCastricum, 5 years ago

The cause of this can be found in script 206 of room 35:

Original 206 script:

[00DA] (43) var244 = 35
[00DF] (5E) startScript(1,201,[1])
[00E7] (5C) until (!isScriptRunning(201)) {
[00EE] (6C) breakHere()
[00EF] (**) }

Buggy 206 script:

[00DA] (5D) if (var244 == 35) {
[00E3] (5E) startScript(1,201,[1])
[00EB] (5C) until (!isScriptRunning(201)) {
[00F2] (6C) breakHere()
[00F3] ( ) }
[00F6] (73) } else {
[00F9] (5E) startScript(1,201,[0])
[0101] (5C) until (!isScriptRunning(201)) {
[0108] (6C) breakHere()
[0109] ( ) }
[010C] ( ) }

Calling script 201 with 0 paramater causes the raft being sent to the void. It even tells you this somewhere :

Script 206:
[00E5] (B6) printDebug.msg("Don't use to-the-void on selected-actor!!")
and
[0113] (B6) printDebug.msg("killed actor, drawing gone raft")

comment:5 by BenCastricum, 5 years ago

Var244 is the location of the raft. It is possible to be at that location without the raft there so they actually tried to fix a bug with this code. However the new bug they introduced by fixing the old one is earlier in the code:

[0000] (6B) cursorCommand.userPutOff()
[0002] (6B) cursorCommand.cursorOff()
[0004] (95) beginOverride()
[0005] (73) jump b8
[0008] (5D) if (!roomvar66) /*00A5*/ {
[000F] (BB)   talkEgo("@T44692137,22979@Well, Pep, it looks like we made it to dry land!")
[0052] (A9)   wait.waitForMessage()
[0054] (BB)   talkEgo("@T44715116,25848@I wonder if we'll find any of the missing baby animals here.")
[00A3] (A9)   wait.waitForMessage()
[00A5] (  ) }
[00A5] (5E) startScript(1,202,[3])
[00AD] (5C) until (!isScriptRunning(202)) /*00B8*/ {
[00B4] (6C)   breakHere()
[00B5] (  ) }
[00B8] (5D) if (VAR_OVERRIDE) /*010F*/ {

Script 202 sets Var244 to 35, but that script does not get executed if you press escape while Putt Putt is talking because the jump b8 at [0005] jumps over this code. Changing this jump to a jump to A5 should fix this bug.

comment:6 by digitall, 5 years ago

Ben has submitted a fix for this as a Pull Request here:
https://github.com/scummvm/scummvm/pull/506

Once this is merged, this item can be closed as fixed.

by Kirben, 5 years ago

Attachment: puttzoo.diff added

comment:7 by Kirben, 5 years ago

This bug effects the HE98.5 version of the game too, which uses different script numbers and offsets. The HE100 version of the game isn't effected though, since it doesn't allow the scene to be skipped.

The patch offered solved the missing raft, but no longer allow the complete scene to be skipped past. Maybe we could alter the variable directly, like the attached patch?

by BenCastricum, 5 years ago

Attachment: puttzoo_v2.diff added

comment:8 by BenCastricum, 5 years ago

That sounds even better, but I think your mixing up the script number with the raft location var. I think your patch should be like this...

by Kirben, 5 years ago

Attachment: puttzoo_v3.diff added

comment:9 by Kirben, 5 years ago

Yes, I made an error with the location variable, since the location variable (var202) is different in the HE98.5 version.

Also which HE version of the game was your fix based off? the initial bug report only mentioned the HE99 version was effected, but your fix seems based off an earlier version of the game, judging by lower script numbers.

comment:10 by BenCastricum, 3 years ago

I have reproduced this bug on a dutch HE73 version of this game. For a good fix for this bug we could use a decompiled script for the HE99 version of the game as well.

comment:11 by BenCastricum, 3 years ago

A fix went into master with this commit which fixes it for me (HE73) and hopefully also for the HE98.5 version. I don't have any HE99 version to check.

comment:12 by BenCastricum, 2 years ago

Owner: set to BenCastricum
Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.