SCUMM: Restore missing cigar smoke to captain Smirk's close-up
In the EGA and VGA floppy versions, the close-up of captain Smirk has animated cigar smoke. I don't have the EGA version, but in the VGA version it apparently depends on whether you're running the game from floppy or hard disk. If you run it from floppy, there is no smoke, probably to cut down on disk access. This is implemented in the entry script for room 76, where it either sets costume 76 or 0 on actor 12. In the VGA CD version, it always sets costume 0. Setting it to 76 restores the smoke, but the position is a bit off. Using the positions from the floppy verion's script 57 fixes that. I have no idea why they were changed in the CD version when they seem to use the same animation. Only the colors are a bit different. The "Ultimate Talkie" version already fixes this, but this fix should not interfer with that. It uses slightly different positions for the smoke, but the difference is never more than a single pixel so I'm not touching those.
This commit is contained in:
parent
70db437f0d
commit
8b29bf5271
1 changed files with 42 additions and 4 deletions
|
@ -444,7 +444,25 @@ void ScummEngine_v5::o5_actorOps() {
|
|||
getVarOrDirectByte(PARAM_1);
|
||||
break;
|
||||
case 1: // SO_COSTUME
|
||||
a->setActorCostume(getVarOrDirectByte(PARAM_1));
|
||||
i = getVarOrDirectByte(PARAM_1);
|
||||
|
||||
// WORKAROUND: In the VGA floppy version of the Monkey
|
||||
// Island 1, there are two different costumes for the
|
||||
// captain Smirk close-up: 0 for when the game is run
|
||||
// from floppies, and 76 for when the game is run from
|
||||
// hard disk, I believe.
|
||||
//
|
||||
// Costume 0 doesn't have any cigar smoke, perhaps to
|
||||
// cut down on disk access.
|
||||
//
|
||||
// But in the VGA CD version, only costume 0 is used
|
||||
// and the close-up is missing the cigar smoke.
|
||||
|
||||
if (_game.id == GID_MONKEY && _currentRoom == 76 && act == 12 && i == 0) {
|
||||
i = 76;
|
||||
}
|
||||
|
||||
a->setActorCostume(i);
|
||||
break;
|
||||
case 2: // SO_STEP_DIST
|
||||
i = getVarOrDirectByte(PARAM_1);
|
||||
|
@ -1452,12 +1470,32 @@ void ScummEngine_v5::o5_pseudoRoom() {
|
|||
}
|
||||
|
||||
void ScummEngine_v5::o5_putActor() {
|
||||
int x, y;
|
||||
Actor *a;
|
||||
int act, x, y;
|
||||
|
||||
a = derefActor(getVarOrDirectByte(PARAM_1), "o5_putActor");
|
||||
act = getVarOrDirectByte(PARAM_1);
|
||||
x = getVarOrDirectWord(PARAM_2);
|
||||
y = getVarOrDirectWord(PARAM_3);
|
||||
|
||||
// WORKAROUND: When enabling the cigar smoke in the captain Smirk
|
||||
// close-up, it turns out that the coordinates were changed in the CD
|
||||
// version's script for no apparent reason. (Were they taken from the
|
||||
// EGA version?)
|
||||
//
|
||||
// The coordinates below are taken from the VGA floppy version. The
|
||||
// "Ultimate Talkie" version also corrects the positions, but uses
|
||||
// other coordinates. The difference is never more than a single pixel,
|
||||
// so there's not much reason to correct those.
|
||||
|
||||
if (_game.id == GID_MONKEY && _currentRoom == 76 && act == 12) {
|
||||
if (x == 176 && y == 80) {
|
||||
x = 174;
|
||||
y = 86;
|
||||
} else if (x == 176 && y == 78) {
|
||||
x = 172;
|
||||
}
|
||||
}
|
||||
|
||||
Actor *a = derefActor(act, "o5_putActor");
|
||||
a->putActor(x, y);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue