Skip to content

SCUMM: Add workaround for missing smoke in MI1 VGA floppy lava maze #6553

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 13, 2025

Conversation

eriktorbjorn
Copy link
Member

@eriktorbjorn eriktorbjorn commented Apr 13, 2025

While playing through the Sega CD version of the game, I noticed that there was animated smoke in some places in the lava maze. I didn't remember this from earlier playthroughs so I checked with my VGA CD version. And sure enough, there it was:

scummvm-monkey-3-00039

But then I checked my VGA floppy version, and there it wasn't:

scummvm-monkey-vga-1-00049

After some investigation, I found that room-39-200 and room-39-201 call startScript(211,[225,93]) and startScript(211,[477,86]) respectively. Here's what room-39-211 does in the VGA CD version:

Script# 211
[0000] (13) ActorOps(12,[Init(),Costume(76),Palette(3,8),Palette(2,12),Palette(9,4),IgnoreBoxes(),SetZClip(1)]);
[0012] (11) animateCostume(12,250);
[0015] (2D) putActorInRoom(12,39);
[0018] (61) putActor(12,Local[0],Local[1]);
[001E] (11) animateCostume(12,6);
[0021] (A0) stopObjectCode();
END

And here's what it does in the VGA floppy version:

Script# 211
[0000] (A0) stopObjectCode();
END

This workaround optionally performs the missing script instructions manually after the script has been called. I'm not sure if all floppy versions are affected, but by doing it afterwards we could easily add a check for if the actor is already in the room, if necessary. (It probably isn't.) And there it is:

image

The colors aren't the same as in the CD version, but I don't see that as a problem because the CD versions don't have the same colors as the EGA or Amiga versions I saw screenshots from. I hope I haven't overlooked something obvious. There is a game entry for a VGA demo version that shares the GID_MONKEY_VGA id, but I don't know where to find that. But surely we don't need to check the GF_DEMO flag here?

In most versions of MI1 (at the very least the DOS CD, Macintosh, and
Sega CD ones, but also the EGA and Amiga ones according to YouTube
playthroughs) there is animated smoke in some places in the lava maze
beneath the monkey head. But in my VGA floppy version, the script that
places the smoke is empty. It's still called though, so this workaround
does what the script does manually.
@eriktorbjorn
Copy link
Member Author

Aric Wilmunder speculated that the smoke animation might not have been present on that floppy, and/or that it was getting swapped out and had to be reloaded, causing slowdowns.

@bluegr
Copy link
Member

bluegr commented Apr 13, 2025

Looks good! Simple and straightforward implementation.

Thanks for working on this!

@bluegr bluegr merged commit ab7e47b into scummvm:master Apr 13, 2025
8 checks passed
@eriktorbjorn
Copy link
Member Author

@bluegr Thanks. It would be interesting to know if they were cut from any other versions, though. I've definitely seen them in the Mac, VGA CD, and Sega CD versions. YouTube playthroughs show that they're in the EGA and Amiga versions as well.

But I don't know about the Atari ST and FM Towns versions, or any other I may have missed.

@dwatteau
Copy link
Contributor

dwatteau commented Apr 16, 2025

Hi,

Adding some feedback, since I own several Monkey1 releases.

First, thanks for this new discovery :)

I studied the scripts from my Amiga/English copy a bit (the '1.2' one, it looks like other Amiga releases exist).

It's an GID_MONKEY_VGA release, too, but there, the script is intact:

Script# 211 (room 39)
[0000] (13) ActorOps(12,[Init(),Costume(76),Palette(3,8),Palette(2,12),Palette(9,4)]);
[000F] (5D) setClass(12,[150,149]);
[0019] (11) animateCostume(12,250);
[001C] (2D) putActorInRoom(12,39);
[001F] (61) putActor(12,Local[0],Local[1]);
[0025] (11) animateCostume(12,6);
[0028] (A0) stopObjectCode();

scummvm-monkey-vga-amiga-00000

Its script is a bit different; the IgnoreBoxes(),SetZClip(1) settings are not given as ActorOps options, but instead setClass(12,[150,149]) achieves the same results (with 149-150 eventually mapping to kObjectClassAlwaysClip/kObjectClassIgnoreBoxes). Looks like this is a v4-v5 difference.

Since we target v4 (and by also looking at ScummEngine::putClass() v4 differences a bit), it felt safer to borrow the small variation from the official Amiga v4 script, then.

So I've pushed commit cf2c955 for that. I've also adjusted the enhancement, so that we're sure it can't cause any problem whether an Amiga release has the full script or not. @eriktorbjorn: It it OK for you?

There is a game entry for a VGA demo version that shares the GID_MONKEY_VGA id, but I don't know where to find that. But surely we don't need to check the GF_DEMO flag here?

There are cases where we tend to forget the demos in the workarounds/enhancements, yeah. I doubt it'd cause any problem here, though, as you can't reach this part in any demo anyway.

It would be interesting to know if they were cut from any other versions, though. I've definitely seen them in the Mac, VGA CD, and Sega CD versions. YouTube playthroughs show that they're in the EGA and Amiga versions as well.

But I don't know about the Atari ST and FM Towns versions, or any other I may have missed.

I don't own all the releases, but what I have in my LRG set seems fine. Looks like it was indeed limited to some VGA floppy releases.

I'm told the FM-TOWNS release has the smoke. I don't know about the Atari ST release, though.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants