JANITORIAL: Update more old bug tracker numbers
I missed the six digit ones and a few others in:
93eeffc84d
This commit is contained in:
parent
17b125b479
commit
674ed112aa
25 changed files with 70 additions and 70 deletions
|
@ -229,7 +229,7 @@ Common::String DefaultSaveFileManager::getSavePath() const {
|
||||||
// Try to use game specific savepath from config
|
// Try to use game specific savepath from config
|
||||||
dir = ConfMan.get("savepath");
|
dir = ConfMan.get("savepath");
|
||||||
|
|
||||||
// Work around a bug (#999122) in the original 0.6.1 release of
|
// Work around a bug (#1689) in the original 0.6.1 release of
|
||||||
// ScummVM, which would insert a bad savepath value into config files.
|
// ScummVM, which would insert a bad savepath value into config files.
|
||||||
if (dir == "None") {
|
if (dir == "None") {
|
||||||
ConfMan.removeKey("savepath", ConfMan.getActiveDomainName());
|
ConfMan.removeKey("savepath", ConfMan.getActiveDomainName());
|
||||||
|
|
|
@ -655,7 +655,7 @@ bool Parallaction::checkSpecialZoneBox(ZonePtr z, uint32 type, uint x, uint y) {
|
||||||
if (((ACTIONTYPE(z) == kZoneMerge) && (((x == z->u._mergeObj1) && (y == z->u._mergeObj2)) || ((x == z->u._mergeObj2) && (y == z->u._mergeObj1)))) ||
|
if (((ACTIONTYPE(z) == kZoneMerge) && (((x == z->u._mergeObj1) && (y == z->u._mergeObj2)) || ((x == z->u._mergeObj2) && (y == z->u._mergeObj1)))) ||
|
||||||
((ACTIONTYPE(z) == kZoneGet) && ((x == z->u._getIcon) || (y == z->u._getIcon)))) {
|
((ACTIONTYPE(z) == kZoneGet) && ((x == z->u._getIcon) || (y == z->u._getIcon)))) {
|
||||||
|
|
||||||
// WORKAROUND for bug 2070751: special zones are only used in NS, to allow the
|
// WORKAROUND for bug #3897: special zones are only used in NS, to allow the
|
||||||
// the EXAMINE/USE action to be applied on some particular item in the inventory.
|
// the EXAMINE/USE action to be applied on some particular item in the inventory.
|
||||||
// The usage a verb requires at least an item match, so type can't be 0, as it
|
// The usage a verb requires at least an item match, so type can't be 0, as it
|
||||||
// was in the original code. This bug has been here since the beginning, and was
|
// was in the original code. This bug has been here since the beginning, and was
|
||||||
|
|
|
@ -2080,7 +2080,7 @@ void ScummEngine::processActors() {
|
||||||
// 'optimization' wouldn't yield a useful gain anyway.
|
// 'optimization' wouldn't yield a useful gain anyway.
|
||||||
//
|
//
|
||||||
// In particular, changing this loop caused a number of bugs in the
|
// In particular, changing this loop caused a number of bugs in the
|
||||||
// past, including bugs #758167, #775097, and #1864.
|
// past, including bugs #912, #1055, and #1864.
|
||||||
//
|
//
|
||||||
// Note that Sam & Max uses a stable sorting method. Older games don't
|
// Note that Sam & Max uses a stable sorting method. Older games don't
|
||||||
// and, according to cyx, neither do newer ones. At least not FT and
|
// and, according to cyx, neither do newer ones. At least not FT and
|
||||||
|
@ -2461,7 +2461,7 @@ void Actor::startAnimActor(int f) {
|
||||||
_needRedraw = true;
|
_needRedraw = true;
|
||||||
_cost.animCounter = 0;
|
_cost.animCounter = 0;
|
||||||
// V1 - V2 games don't seem to need a _cost.reset() at this point.
|
// V1 - V2 games don't seem to need a _cost.reset() at this point.
|
||||||
// Causes Zak to lose his body in several scenes, see bug #771508
|
// Causes Zak to lose his body in several scenes, see bug #1032
|
||||||
if (_vm->_game.version >= 3 && f == _initFrame) {
|
if (_vm->_game.version >= 3 && f == _initFrame) {
|
||||||
_cost.reset();
|
_cost.reset();
|
||||||
if (_vm->_game.heversion != 0) {
|
if (_vm->_game.heversion != 0) {
|
||||||
|
@ -2844,7 +2844,7 @@ void ScummEngine::actorTalk(const byte *msg) {
|
||||||
// bug (#11480). It is not okay to skip the stopTalk() calls here.
|
// bug (#11480). It is not okay to skip the stopTalk() calls here.
|
||||||
// Instead, I have added two checks from LOOM DOS EGA disasm (one
|
// Instead, I have added two checks from LOOM DOS EGA disasm (one
|
||||||
// below and one in CHARSET_1()).
|
// below and one in CHARSET_1()).
|
||||||
// WORKAROUND for bugs #770039 and #770049
|
// WORKAROUND for bugs #985 and #990
|
||||||
/*if (_game.id == GID_LOOM) {
|
/*if (_game.id == GID_LOOM) {
|
||||||
if (!*_charsetBuffer)
|
if (!*_charsetBuffer)
|
||||||
return;
|
return;
|
||||||
|
@ -2858,7 +2858,7 @@ void ScummEngine::actorTalk(const byte *msg) {
|
||||||
} else {
|
} else {
|
||||||
int oldact;
|
int oldact;
|
||||||
|
|
||||||
// WORKAROUND bug #770724
|
// WORKAROUND bug #1025
|
||||||
if (_game.id == GID_LOOM && _roomResource == 23 &&
|
if (_game.id == GID_LOOM && _roomResource == 23 &&
|
||||||
vm.slot[_currentScript].number == 232 && _actorToPrintStrFor == 0) {
|
vm.slot[_currentScript].number == 232 && _actorToPrintStrFor == 0) {
|
||||||
_actorToPrintStrFor = 2; // Could be anything from 2 to 5. Maybe compare to original?
|
_actorToPrintStrFor = 2; // Could be anything from 2 to 5. Maybe compare to original?
|
||||||
|
|
|
@ -164,7 +164,7 @@ static Common::Point closestPtOnLine(const Common::Point &lineStart, const Commo
|
||||||
}
|
}
|
||||||
|
|
||||||
byte ScummEngine::getMaskFromBox(int box) {
|
byte ScummEngine::getMaskFromBox(int box) {
|
||||||
// WORKAROUND for bug #740244 and #755863. This appears to have been a
|
// WORKAROUND for bug #791 and #897. This appears to have been a
|
||||||
// long standing bug in the original engine?
|
// long standing bug in the original engine?
|
||||||
if (_game.version <= 3 && box == 255)
|
if (_game.version <= 3 && box == 255)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -173,7 +173,7 @@ byte ScummEngine::getMaskFromBox(int box) {
|
||||||
if (!ptr)
|
if (!ptr)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// WORKAROUND for bug #847827: This is a bug in the data files, as it also
|
// WORKAROUND for bug #1315: This is a bug in the data files, as it also
|
||||||
// occurs with the original engine. We work around it here anyway.
|
// occurs with the original engine. We work around it here anyway.
|
||||||
if (_game.id == GID_INDY4 && _currentRoom == 225 && _roomResource == 94 && box == 8)
|
if (_game.id == GID_INDY4 && _currentRoom == 225 && _roomResource == 94 && box == 8)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -462,7 +462,7 @@ Box *ScummEngine::getBoxBaseAddr(int box) {
|
||||||
|
|
||||||
// WORKAROUND: In "pass to adventure", the loom demo, when bobbin enters
|
// WORKAROUND: In "pass to adventure", the loom demo, when bobbin enters
|
||||||
// the tent to the elders, box = 2, but ptr[0] = 2 -> errors out.
|
// the tent to the elders, box = 2, but ptr[0] = 2 -> errors out.
|
||||||
// Also happens in Indy3EGA (see bug #770351) and ZakEGA (see bug #771803).
|
// Also happens in Indy3EGA (see bug #1007) and ZakEGA (see bug #1037).
|
||||||
//
|
//
|
||||||
// This *might* mean that we have a bug in our box implementation
|
// This *might* mean that we have a bug in our box implementation
|
||||||
// OTOH, the original engine, unlike ScummVM, performed no bound
|
// OTOH, the original engine, unlike ScummVM, performed no bound
|
||||||
|
@ -587,7 +587,7 @@ BoxCoords ScummEngine::getBoxCoordinates(int boxnum) {
|
||||||
box->lr.x = (short)FROM_LE_32(bp->v8.lrx);
|
box->lr.x = (short)FROM_LE_32(bp->v8.lrx);
|
||||||
box->lr.y = (short)FROM_LE_32(bp->v8.lry);
|
box->lr.y = (short)FROM_LE_32(bp->v8.lry);
|
||||||
|
|
||||||
// WORKAROUND (see patch #684732): Some walkboxes in CMI appear
|
// WORKAROUND (see patch #8173): Some walkboxes in CMI appear
|
||||||
// to have been flipped, in the sense that for instance the
|
// to have been flipped, in the sense that for instance the
|
||||||
// lower boundary is above the upper one. We work around this
|
// lower boundary is above the upper one. We work around this
|
||||||
// by simply flipping them back.
|
// by simply flipping them back.
|
||||||
|
@ -757,7 +757,7 @@ int ScummEngine::getNextBox(byte from, byte to) {
|
||||||
// WORKAROUND #1: It seems that in some cases, the box matrix is corrupt
|
// WORKAROUND #1: It seems that in some cases, the box matrix is corrupt
|
||||||
// (more precisely, is too short) in the datafiles already. In
|
// (more precisely, is too short) in the datafiles already. In
|
||||||
// particular this seems to be the case in room 46 of Indy3 EGA (see
|
// particular this seems to be the case in room 46 of Indy3 EGA (see
|
||||||
// also bug #770690). This didn't cause problems in the original
|
// also bug #1017). This didn't cause problems in the original
|
||||||
// engine, because there, the memory layout is different. After the
|
// engine, because there, the memory layout is different. After the
|
||||||
// walkbox would follow the rest of the room file, thus the program
|
// walkbox would follow the rest of the room file, thus the program
|
||||||
// always behaved the same (and by chance, correct). Not so for us,
|
// always behaved the same (and by chance, correct). Not so for us,
|
||||||
|
@ -769,7 +769,7 @@ int ScummEngine::getNextBox(byte from, byte to) {
|
||||||
|
|
||||||
// WORKAROUND #2: In addition to the above, we have to add this special
|
// WORKAROUND #2: In addition to the above, we have to add this special
|
||||||
// case to fix the scene in Indy3 where Indy meets Hitler in Berlin.
|
// case to fix the scene in Indy3 where Indy meets Hitler in Berlin.
|
||||||
// See bug #770690 and also bug #774783.
|
// See bug #1017 and also bug #1052.
|
||||||
if ((_game.id == GID_INDY3) && _roomResource == 46 && from == 1 && to == 0)
|
if ((_game.id == GID_INDY3) && _roomResource == 46 && from == 1 && to == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -237,8 +237,8 @@ void ScummEngine_v7::setCameraAt(int pos_x, int pos_y) {
|
||||||
|
|
||||||
// Even though cameraMoved() is called automatically, we may
|
// Even though cameraMoved() is called automatically, we may
|
||||||
// need to know at once that the camera has moved, or text may
|
// need to know at once that the camera has moved, or text may
|
||||||
// be printed at the wrong coordinates. See bugs #795938 and
|
// be printed at the wrong coordinates. See bugs #1195 and
|
||||||
// #929242
|
// #1579
|
||||||
cameraMoved();
|
cameraMoved();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1923,7 +1923,7 @@ bool Gdi::drawStrip(byte *dstPtr, VirtScreen *vs, int x, int y, const int width,
|
||||||
// Do some input verification and make sure the strip/strip offset
|
// Do some input verification and make sure the strip/strip offset
|
||||||
// are actually valid. Normally, this should never be a problem,
|
// are actually valid. Normally, this should never be a problem,
|
||||||
// but if e.g. a savegame gets corrupted, we can easily get into
|
// but if e.g. a savegame gets corrupted, we can easily get into
|
||||||
// trouble here. See also bug #795214.
|
// trouble here. See also bug #1191.
|
||||||
int offset = -1, smapLen;
|
int offset = -1, smapLen;
|
||||||
if (_vm->_game.features & GF_16COLOR) {
|
if (_vm->_game.features & GF_16COLOR) {
|
||||||
smapLen = READ_LE_UINT16(smap_ptr);
|
smapLen = READ_LE_UINT16(smap_ptr);
|
||||||
|
|
|
@ -363,7 +363,7 @@ void IMuseInternal::pause(bool paused) {
|
||||||
update_volumes();
|
update_volumes();
|
||||||
_music_volume = vol;
|
_music_volume = vol;
|
||||||
|
|
||||||
// Fix for Bug #817871. The MT-32 apparently fails
|
// Fix for Bug #1263. The MT-32 apparently fails
|
||||||
// sometimes to respond to a channel volume message
|
// sometimes to respond to a channel volume message
|
||||||
// (or only uses it for subsequent note events).
|
// (or only uses it for subsequent note events).
|
||||||
// The result is hanging notes on pause. Reportedly
|
// The result is hanging notes on pause. Reportedly
|
||||||
|
@ -607,7 +607,7 @@ bool IMuseInternal::startSound_internal(int sound, int offset) {
|
||||||
// playing, otherwise the music may stop when Sam and Max are thrown
|
// playing, otherwise the music may stop when Sam and Max are thrown
|
||||||
// out of Bumpusville, because entering the mansion sets up a trigger
|
// out of Bumpusville, because entering the mansion sets up a trigger
|
||||||
// for a sound that isn't necessarily playing. This is somewhat related
|
// for a sound that isn't necessarily playing. This is somewhat related
|
||||||
// to bug #780918.
|
// to bug #1090.
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
ImTrigger *trigger = _snm_triggers;
|
ImTrigger *trigger = _snm_triggers;
|
||||||
|
@ -633,8 +633,8 @@ bool IMuseInternal::startSound_internal(int sound, int offset) {
|
||||||
// iMuse messiness while upgrading the iMuse engine, but it
|
// iMuse messiness while upgrading the iMuse engine, but it
|
||||||
// is apparently necessary to deal with fade-and-restart
|
// is apparently necessary to deal with fade-and-restart
|
||||||
// race conditions that were observed in MI2. Reference
|
// race conditions that were observed in MI2. Reference
|
||||||
// Bug #590511 and Patch #607175 (which was reversed to fix
|
// Bug #385 and Patch #8038 (which was reversed to fix
|
||||||
// an FOA regression: Bug #622606).
|
// an FOA regression: Bug #488).
|
||||||
Player *player = findActivePlayer(sound);
|
Player *player = findActivePlayer(sound);
|
||||||
if (!player) {
|
if (!player) {
|
||||||
ptr = findStartOfSound(sound, IMuseInternal::kMDhd);
|
ptr = findStartOfSound(sound, IMuseInternal::kMDhd);
|
||||||
|
@ -1255,7 +1255,7 @@ int32 IMuseInternal::ImSetTrigger(int sound, int id, int a, int b, int c, int d,
|
||||||
break;
|
break;
|
||||||
// We used to only compare 'id' and 'sound' here, but at least
|
// We used to only compare 'id' and 'sound' here, but at least
|
||||||
// at the Dino Bungie Memorial that causes the music to stop
|
// at the Dino Bungie Memorial that causes the music to stop
|
||||||
// after getting the T-Rex tooth. See bug #888161.
|
// after getting the T-Rex tooth. See bug #1429.
|
||||||
if (trig->id == id && trig->sound == sound && trig->command[0] == a)
|
if (trig->id == id && trig->sound == sound && trig->command[0] == a)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1291,7 +1291,7 @@ int32 IMuseInternal::ImSetTrigger(int sound, int id, int a, int b, int c, int d,
|
||||||
// This fixes some carnival music problems.
|
// This fixes some carnival music problems.
|
||||||
// NOTE: We ONLY do this if the sound that will trigger the command is actually
|
// NOTE: We ONLY do this if the sound that will trigger the command is actually
|
||||||
// playing. Otherwise, there's a problem when exiting and re-entering the
|
// playing. Otherwise, there's a problem when exiting and re-entering the
|
||||||
// Bumpusville mansion. Ref Bug #780918.
|
// Bumpusville mansion. Ref Bug #1090.
|
||||||
if (trig->command[0] == 8 && getSoundStatus_internal(trig->command[1], true) && getSoundStatus_internal(sound, true))
|
if (trig->command[0] == 8 && getSoundStatus_internal(trig->command[1], true) && getSoundStatus_internal(sound, true))
|
||||||
stopSound_internal(trig->command[1]);
|
stopSound_internal(trig->command[1]);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -102,7 +102,7 @@ void sysexHandler_Scumm(Player *player, const byte *msg, uint16 len) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
// Shut down a part. [Bug 1088045, comments]
|
// Shut down a part. [Bug #1849, comments]
|
||||||
part = player->getPart(p[0]);
|
part = player->getPart(p[0]);
|
||||||
if (part != NULL)
|
if (part != NULL)
|
||||||
part->uninit();
|
part->uninit();
|
||||||
|
|
|
@ -101,7 +101,7 @@ void ScummEngine::setOwnerOf(int obj, int owner) {
|
||||||
|
|
||||||
// In Sam & Max this is necessary, or you won't get your stuff back
|
// In Sam & Max this is necessary, or you won't get your stuff back
|
||||||
// from the Lost and Found tent after riding the Cone of Tragedy. But
|
// from the Lost and Found tent after riding the Cone of Tragedy. But
|
||||||
// it probably applies to all V6+ games. See bugs #493153 and #907113.
|
// it probably applies to all V6+ games. See bugs #52 and #1507.
|
||||||
// FT disassembly is checked, behavior is correct. [sev]
|
// FT disassembly is checked, behavior is correct. [sev]
|
||||||
|
|
||||||
int arg = (_game.version >= 6) ? obj : 0;
|
int arg = (_game.version >= 6) ? obj : 0;
|
||||||
|
@ -502,7 +502,7 @@ int ScummEngine::getObjActToObjActDist(int a, int b) {
|
||||||
// Perform adjustXYToBeInBox() *only* if the first item is an
|
// Perform adjustXYToBeInBox() *only* if the first item is an
|
||||||
// actor and the second is an object. This used to not check
|
// actor and the second is an object. This used to not check
|
||||||
// whether the second item is a non-actor, which caused bug
|
// whether the second item is a non-actor, which caused bug
|
||||||
// #853874).
|
// #1320).
|
||||||
if (acta && !actb) {
|
if (acta && !actb) {
|
||||||
AdjustBoxResult r = acta->adjustXYToBeInBox(x2, y2);
|
AdjustBoxResult r = acta->adjustXYToBeInBox(x2, y2);
|
||||||
x2 = r.x;
|
x2 = r.x;
|
||||||
|
|
|
@ -1178,7 +1178,7 @@ void ScummEngine_v5::readMAXS(int blockSize) {
|
||||||
_numArray = 50;
|
_numArray = 50;
|
||||||
_numVerbs = 100;
|
_numVerbs = 100;
|
||||||
// Used to be 50, which wasn't enough for MI2 and FOA. See bugs
|
// Used to be 50, which wasn't enough for MI2 and FOA. See bugs
|
||||||
// #933610, #936323 and #941275.
|
// #1591, #1600 and #1607.
|
||||||
_numNewNames = 150;
|
_numNewNames = 150;
|
||||||
_objectRoomTable = NULL;
|
_objectRoomTable = NULL;
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ void ScummEngine::startScene(int room, Actor *a, int objectNr) {
|
||||||
stopCycle(0);
|
stopCycle(0);
|
||||||
|
|
||||||
if (_game.id == GID_SAMNMAX) {
|
if (_game.id == GID_SAMNMAX) {
|
||||||
// WORKAROUND bug #85373 SAM: Overlapping music at Bigfoot convention
|
// WORKAROUND bug #1132 SAM: Overlapping music at Bigfoot convention
|
||||||
// Added sound queue processing between execution of exit
|
// Added sound queue processing between execution of exit
|
||||||
// script and entry script. In the case of this bug, the
|
// script and entry script. In the case of this bug, the
|
||||||
// entry script required that the iMuse state be fully up
|
// entry script required that the iMuse state be fully up
|
||||||
|
@ -99,7 +99,7 @@ void ScummEngine::startScene(int room, Actor *a, int objectNr) {
|
||||||
|
|
||||||
if (_game.version >= 7) {
|
if (_game.version >= 7) {
|
||||||
// Set the shadow palette(s) to all black. This fixes
|
// Set the shadow palette(s) to all black. This fixes
|
||||||
// bug #795940, and actually makes some sense (after all,
|
// bug #1196, and actually makes some sense (after all,
|
||||||
// shadows tend to be rather black, don't they? ;-)
|
// shadows tend to be rather black, don't they? ;-)
|
||||||
memset(_shadowPalette, 0, NUM_SHADOW_PALETTE * 256);
|
memset(_shadowPalette, 0, NUM_SHADOW_PALETTE * 256);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -399,7 +399,7 @@ bool ScummEngine::loadState(int slot, bool compat, Common::String &filename) {
|
||||||
// Thus, we should probably not stop music when restoring from one of
|
// Thus, we should probably not stop music when restoring from one of
|
||||||
// these saves. This change stops the Mole Man theme from going quiet in
|
// these saves. This change stops the Mole Man theme from going quiet in
|
||||||
// Sam & Max when Doug tells you about the Ball of Twine, as mentioned in
|
// Sam & Max when Doug tells you about the Ball of Twine, as mentioned in
|
||||||
// patch #886058.
|
// patch #8316.
|
||||||
//
|
//
|
||||||
// If we don't have iMUSE at all we may as well stop the sounds. The previous
|
// If we don't have iMUSE at all we may as well stop the sounds. The previous
|
||||||
// default behavior here was to stopAllSounds on all state restores.
|
// default behavior here was to stopAllSounds on all state restores.
|
||||||
|
@ -465,7 +465,7 @@ bool ScummEngine::loadState(int slot, bool compat, Common::String &filename) {
|
||||||
if (_screenTop < 0)
|
if (_screenTop < 0)
|
||||||
_screenTop = 0;
|
_screenTop = 0;
|
||||||
|
|
||||||
// WORKAROUND bug #795214: For unknown reasons, object 819 sometimes is in
|
// WORKAROUND bug #1191: For unknown reasons, object 819 sometimes is in
|
||||||
// state 1 in old save games, implying it should be drawn. This in turn
|
// state 1 in old save games, implying it should be drawn. This in turn
|
||||||
// results in a crash when entering the church, as object 819 is part of the
|
// results in a crash when entering the church, as object 819 is part of the
|
||||||
// exitof the church and there are no graphics assigned to it.
|
// exitof the church and there are no graphics assigned to it.
|
||||||
|
@ -1484,7 +1484,7 @@ void ScummEngine::saveLoadWithSerializer(Common::Serializer &s) {
|
||||||
syncWithSerializer(s, info);
|
syncWithSerializer(s, info);
|
||||||
// If we are loading, and the music being loaded was supposed to loop
|
// If we are loading, and the music being loaded was supposed to loop
|
||||||
// forever, then resume playing it. This helps a lot when the audio CD
|
// forever, then resume playing it. This helps a lot when the audio CD
|
||||||
// is used to provide ambient music (see bug #788195).
|
// is used to provide ambient music (see bug #1150).
|
||||||
if (s.isLoading() && info.playing && info.numLoops < 0)
|
if (s.isLoading() && info.playing && info.numLoops < 0)
|
||||||
_sound->playCDTrackInternal(info.track, info.numLoops, info.start, info.duration);
|
_sound->playCDTrackInternal(info.track, info.numLoops, info.start, info.duration);
|
||||||
}
|
}
|
||||||
|
@ -1715,7 +1715,7 @@ void ScummEngine::loadResourceOLD(Common::Serializer &ser, ResType type, ResId i
|
||||||
}
|
}
|
||||||
if (type == rtObjectName && ser.getVersion() >= VER(25)) {
|
if (type == rtObjectName && ser.getVersion() >= VER(25)) {
|
||||||
// Paranoia: We increased the possible number of new names
|
// Paranoia: We increased the possible number of new names
|
||||||
// to fix bugs #933610 and #936323. The savegame format
|
// to fix bugs #1591 and #1600. The savegame format
|
||||||
// didn't change, but at least during the transition
|
// didn't change, but at least during the transition
|
||||||
// period there is a slight chance that we try to load
|
// period there is a slight chance that we try to load
|
||||||
// more names than we have allocated space for. If so,
|
// more names than we have allocated space for. If so,
|
||||||
|
|
|
@ -1036,7 +1036,7 @@ void ScummEngine::killScriptsAndResources() {
|
||||||
// no longer in use (i.e. not owned by anyone anymore); or if
|
// no longer in use (i.e. not owned by anyone anymore); or if
|
||||||
// it is an object which is owned by a room.
|
// it is an object which is owned by a room.
|
||||||
if (owner == 0 || (_game.version < 7 && owner == OF_OWNER_ROOM)) {
|
if (owner == 0 || (_game.version < 7 && owner == OF_OWNER_ROOM)) {
|
||||||
// WORKAROUND for a problem mentioned in bug report #941275:
|
// WORKAROUND for a problem mentioned in bug report #1607:
|
||||||
// In FOA in the sentry room, in the chest plate of the statue,
|
// In FOA in the sentry room, in the chest plate of the statue,
|
||||||
// the pegs may be renamed to mouth: this custom name is lost
|
// the pegs may be renamed to mouth: this custom name is lost
|
||||||
// when leaving the room; this hack prevents this).
|
// when leaving the room; this hack prevents this).
|
||||||
|
@ -1485,7 +1485,7 @@ int ScummEngine::resStrLen(const byte *src) {
|
||||||
chr = *src++;
|
chr = *src++;
|
||||||
num++;
|
num++;
|
||||||
|
|
||||||
// WORKAROUND for bug #985948, a script bug in Indy3. See also
|
// WORKAROUND for bug #1675, a script bug in Indy3. See also
|
||||||
// the corresponding code in ScummEngine::convertMessageToString().
|
// the corresponding code in ScummEngine::convertMessageToString().
|
||||||
if (_game.id == GID_INDY3 && chr == 0x2E) {
|
if (_game.id == GID_INDY3 && chr == 0x2E) {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -1228,7 +1228,7 @@ void ScummEngine_v2::stopScriptCommon(int script) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_game.id == GID_MANIAC && _roomResource == 26 && vm.slot[_currentScript].number == 10001) {
|
if (_game.id == GID_MANIAC && _roomResource == 26 && vm.slot[_currentScript].number == 10001) {
|
||||||
// FIXME: Nasty hack for bug #915575
|
// FIXME: Nasty hack for bug #1529
|
||||||
// Don't let the exit script for room 26 stop the script (116), when
|
// Don't let the exit script for room 26 stop the script (116), when
|
||||||
// switching to the dungeon (script 89)
|
// switching to the dungeon (script 89)
|
||||||
if (script == MM_SCRIPT(111) && isScriptRunning(MM_SCRIPT(84)))
|
if (script == MM_SCRIPT(111) && isScriptRunning(MM_SCRIPT(84)))
|
||||||
|
|
|
@ -570,7 +570,7 @@ void ScummEngine_v5::o5_add() {
|
||||||
getResultPos();
|
getResultPos();
|
||||||
a = getVarOrDirectWord(PARAM_1);
|
a = getVarOrDirectWord(PARAM_1);
|
||||||
|
|
||||||
// WORKAROUND bug #770065: This works around a script bug in LoomCD. To
|
// WORKAROUND bug #994: This works around a script bug in LoomCD. To
|
||||||
// understand the reasoning behind this, compare script 210 and 218 in
|
// understand the reasoning behind this, compare script 210 and 218 in
|
||||||
// room 20. Apparently they made a mistake when converting the absolute
|
// room 20. Apparently they made a mistake when converting the absolute
|
||||||
// delays into relative ones.
|
// delays into relative ones.
|
||||||
|
@ -615,13 +615,13 @@ void ScummEngine_v5::o5_animateActor() {
|
||||||
int act = getVarOrDirectByte(PARAM_1);
|
int act = getVarOrDirectByte(PARAM_1);
|
||||||
int anim = getVarOrDirectByte(PARAM_2);
|
int anim = getVarOrDirectByte(PARAM_2);
|
||||||
|
|
||||||
// WORKAROUND bug #820357: This seems to be yet another script bug which
|
// WORKAROUND bug #1265: This seems to be yet another script bug which
|
||||||
// the original engine let slip by. For details, refer to the tracker item.
|
// the original engine let slip by. For details, refer to the tracker item.
|
||||||
if (_game.id == GID_INDY4 && vm.slot[_currentScript].number == 206 && _currentRoom == 17 && (act == 31 || act == 86)) {
|
if (_game.id == GID_INDY4 && vm.slot[_currentScript].number == 206 && _currentRoom == 17 && (act == 31 || act == 86)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// WORKAROUND bug #859513: While on mars, going outside without your helmet
|
// WORKAROUND bug #1339: While on mars, going outside without your helmet
|
||||||
// (or missing some other part of your "space suite" will cause your
|
// (or missing some other part of your "space suite" will cause your
|
||||||
// character to complain ("I can't breathe."). Unfortunately, this is
|
// character to complain ("I can't breathe."). Unfortunately, this is
|
||||||
// coupled with an animate command, making it very difficult to return to
|
// coupled with an animate command, making it very difficult to return to
|
||||||
|
@ -653,7 +653,7 @@ void ScummEngine_v5::o5_chainScript() {
|
||||||
|
|
||||||
cur = _currentScript;
|
cur = _currentScript;
|
||||||
|
|
||||||
// WORKAROUND bug #743314: Work around a bug in script 33 in Indy3 VGA.
|
// WORKAROUND bug #812: Work around a bug in script 33 in Indy3 VGA.
|
||||||
// That script is used for the fist fights in the Zeppelin. It uses
|
// That script is used for the fist fights in the Zeppelin. It uses
|
||||||
// Local[5], even though that is never set to any value. But script 33 is
|
// Local[5], even though that is never set to any value. But script 33 is
|
||||||
// called via chainScript by script 32, and in there Local[5] is set to
|
// called via chainScript by script 32, and in there Local[5] is set to
|
||||||
|
@ -1009,7 +1009,7 @@ void ScummEngine_v5::o5_getActorMoving() {
|
||||||
void ScummEngine_v5::o5_getActorRoom() {
|
void ScummEngine_v5::o5_getActorRoom() {
|
||||||
getResultPos();
|
getResultPos();
|
||||||
int act = getVarOrDirectByte(PARAM_1);
|
int act = getVarOrDirectByte(PARAM_1);
|
||||||
// WORKAROUND bug #746349. This is a really odd bug in either the script
|
// WORKAROUND bug #832. This is a really odd bug in either the script
|
||||||
// or in our script engine. Might be a good idea to investigate this
|
// or in our script engine. Might be a good idea to investigate this
|
||||||
// further by e.g. looking at the FOA engine a bit closer.
|
// further by e.g. looking at the FOA engine a bit closer.
|
||||||
if (_game.id == GID_INDY4 && _roomResource == 94 && vm.slot[_currentScript].number == 206 && !isValidActor(act)) {
|
if (_game.id == GID_INDY4 && _roomResource == 94 && vm.slot[_currentScript].number == 206 && !isValidActor(act)) {
|
||||||
|
@ -1063,7 +1063,7 @@ void ScummEngine_v5::o5_getActorY() {
|
||||||
if ((_game.id == GID_INDY3) && !(_game.platform == Common::kPlatformMacintosh)) {
|
if ((_game.id == GID_INDY3) && !(_game.platform == Common::kPlatformMacintosh)) {
|
||||||
a = getVarOrDirectByte(PARAM_1);
|
a = getVarOrDirectByte(PARAM_1);
|
||||||
|
|
||||||
// WORKAROUND bug #636433 (can't get into Zeppelin)
|
// WORKAROUND bug #560 (can't get into Zeppelin)
|
||||||
if (_roomResource == 36) {
|
if (_roomResource == 36) {
|
||||||
setResult(getObjY(a) - 1);
|
setResult(getObjY(a) - 1);
|
||||||
return;
|
return;
|
||||||
|
@ -1123,12 +1123,12 @@ void ScummEngine_v5::o5_getDist() {
|
||||||
else
|
else
|
||||||
r = getObjActToObjActDist(o1, o2);
|
r = getObjActToObjActDist(o1, o2);
|
||||||
|
|
||||||
// FIXME: MI2 race workaround, see bug #597022. We never quite figured out
|
// FIXME: MI2 race workaround, see bug #420. We never quite figured out
|
||||||
// what the real cause of this, or if it maybe occurs in the original, too...
|
// what the real cause of this, or if it maybe occurs in the original, too...
|
||||||
if (_game.id == GID_MONKEY2 && vm.slot[_currentScript].number == 40 && r < 60)
|
if (_game.id == GID_MONKEY2 && vm.slot[_currentScript].number == 40 && r < 60)
|
||||||
r = 60;
|
r = 60;
|
||||||
|
|
||||||
// WORKAROUND bug #795937
|
// WORKAROUND bug #1194
|
||||||
if ((_game.id == GID_MONKEY_EGA || _game.id == GID_PASS) && o1 == 1 && o2 == 307 && vm.slot[_currentScript].number == 205 && r == 2)
|
if ((_game.id == GID_MONKEY_EGA || _game.id == GID_PASS) && o1 == 1 && o2 == 307 && vm.slot[_currentScript].number == 205 && r == 2)
|
||||||
r = 3;
|
r = 3;
|
||||||
|
|
||||||
|
@ -1219,7 +1219,7 @@ void ScummEngine_v5::o5_isEqual() {
|
||||||
a = readVar(var);
|
a = readVar(var);
|
||||||
b = getVarOrDirectWord(PARAM_1);
|
b = getVarOrDirectWord(PARAM_1);
|
||||||
|
|
||||||
// HACK: See bug report #602348. The sound effects for Largo's screams
|
// HACK: See bug report #441. The sound effects for Largo's screams
|
||||||
// are only played on type 5 soundcards. However, there is at least one
|
// are only played on type 5 soundcards. However, there is at least one
|
||||||
// other sound effect (the bartender spitting) which is only played on
|
// other sound effect (the bartender spitting) which is only played on
|
||||||
// type 3 soundcards.
|
// type 3 soundcards.
|
||||||
|
@ -1257,7 +1257,7 @@ void ScummEngine_v5::o5_isLessEqual() {
|
||||||
int16 a = getVar();
|
int16 a = getVar();
|
||||||
int16 b = getVarOrDirectWord(PARAM_1);
|
int16 b = getVarOrDirectWord(PARAM_1);
|
||||||
|
|
||||||
// WORKAROUND bug #820507 : Work around a bug in Indy3Town.
|
// WORKAROUND bug #1266 : Work around a bug in Indy3Town.
|
||||||
if (_game.id == GID_INDY3 && (_game.platform == Common::kPlatformFMTowns) &&
|
if (_game.id == GID_INDY3 && (_game.platform == Common::kPlatformFMTowns) &&
|
||||||
(vm.slot[_currentScript].number == 200 || vm.slot[_currentScript].number == 203) &&
|
(vm.slot[_currentScript].number == 200 || vm.slot[_currentScript].number == 203) &&
|
||||||
_currentRoom == 70 && b == -256) {
|
_currentRoom == 70 && b == -256) {
|
||||||
|
@ -1619,7 +1619,7 @@ void ScummEngine_v5::o5_resourceRoutines() {
|
||||||
loadFlObject(getVarOrDirectWord(PARAM_2), resid);
|
loadFlObject(getVarOrDirectWord(PARAM_2), resid);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// TODO: For the following see also Hibarnatus' information on bug #805691.
|
// TODO: For the following see also Hibarnatus' information on bug #7315.
|
||||||
case 32:
|
case 32:
|
||||||
// TODO (apparently never used in FM-TOWNS)
|
// TODO (apparently never used in FM-TOWNS)
|
||||||
debug(0, "o5_resourceRoutines %d not yet handled (script %d)", op, vm.slot[_currentScript].number);
|
debug(0, "o5_resourceRoutines %d not yet handled (script %d)", op, vm.slot[_currentScript].number);
|
||||||
|
@ -2036,7 +2036,7 @@ void ScummEngine_v5::o5_setVarRange() {
|
||||||
void ScummEngine_v5::o5_startMusic() {
|
void ScummEngine_v5::o5_startMusic() {
|
||||||
if (_game.platform == Common::kPlatformFMTowns && _game.version == 3) {
|
if (_game.platform == Common::kPlatformFMTowns && _game.version == 3) {
|
||||||
// In FM-TOWNS games this is some kind of Audio CD status query function.
|
// In FM-TOWNS games this is some kind of Audio CD status query function.
|
||||||
// See also bug #762589 (thanks to Hibernatus for providing the information).
|
// See also bug #927 (thanks to Hibernatus for providing the information).
|
||||||
getResultPos();
|
getResultPos();
|
||||||
int b = getVarOrDirectByte(PARAM_1);
|
int b = getVarOrDirectByte(PARAM_1);
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
@ -2546,7 +2546,7 @@ void ScummEngine_v5::o5_walkActorToActor() {
|
||||||
|
|
||||||
if (_game.id == GID_LOOM && _game.version == 4 && nr == 1 && nr2 == 0 &&
|
if (_game.id == GID_LOOM && _game.version == 4 && nr == 1 && nr2 == 0 &&
|
||||||
dist == 255 && vm.slot[_currentScript].number == 98) {
|
dist == 255 && vm.slot[_currentScript].number == 98) {
|
||||||
// WORKAROUND bug #743615: LoomCD script 98 contains this:
|
// WORKAROUND bug #814: LoomCD script 98 contains this:
|
||||||
// walkActorToActor(1,0,255)
|
// walkActorToActor(1,0,255)
|
||||||
// Once again this is either a script bug, or there is some hidden
|
// Once again this is either a script bug, or there is some hidden
|
||||||
// or unknown meaning to this odd walk request...
|
// or unknown meaning to this odd walk request...
|
||||||
|
@ -2728,7 +2728,7 @@ void ScummEngine_v5::decodeParseString() {
|
||||||
//
|
//
|
||||||
// Note: We can't use saveDefault() here because we only want to
|
// Note: We can't use saveDefault() here because we only want to
|
||||||
// save the position and color. In particular, we do not want to
|
// save the position and color. In particular, we do not want to
|
||||||
// save the 'center' flag. See bug #933168.
|
// save the 'center' flag. See bug #1588.
|
||||||
if (_game.version <= 3) {
|
if (_game.version <= 3) {
|
||||||
_string[textSlot]._default.xpos = _string[textSlot].xpos;
|
_string[textSlot]._default.xpos = _string[textSlot].xpos;
|
||||||
_string[textSlot]._default.ypos = _string[textSlot].ypos;
|
_string[textSlot]._default.ypos = _string[textSlot].ypos;
|
||||||
|
|
|
@ -397,7 +397,7 @@ int ScummEngine_v6::readArray(int array, int idx, int base) {
|
||||||
if (!ah)
|
if (!ah)
|
||||||
error("readArray: invalid array %d (%d)", array, readVar(array));
|
error("readArray: invalid array %d (%d)", array, readVar(array));
|
||||||
|
|
||||||
// WORKAROUND bug #645711. This is clearly a script bug, as this script
|
// WORKAROUND bug #600. This is clearly a script bug, as this script
|
||||||
// excerpt shows nicely:
|
// excerpt shows nicely:
|
||||||
// ...
|
// ...
|
||||||
// [03A7] (5D) if (isAnyOf(array-447[localvar13][localvar14],[0,4])) {
|
// [03A7] (5D) if (isAnyOf(array-447[localvar13][localvar14],[0,4])) {
|
||||||
|
@ -755,7 +755,7 @@ void ScummEngine_v6::o6_startScript() {
|
||||||
_sound->soundKludge(list, 2);
|
_sound->soundKludge(list, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// WORKAROUND bug #556558: At Dino Bungee National Memorial, the buttons for
|
// WORKAROUND bug #269: At Dino Bungee National Memorial, the buttons for
|
||||||
// the Wally and Rex dinosaurs will always restart their speech, instead of
|
// the Wally and Rex dinosaurs will always restart their speech, instead of
|
||||||
// stopping and starting their speech. This was a script bug in the original
|
// stopping and starting their speech. This was a script bug in the original
|
||||||
// game.
|
// game.
|
||||||
|
@ -764,7 +764,7 @@ void ScummEngine_v6::o6_startScript() {
|
||||||
o6_breakHere();
|
o6_breakHere();
|
||||||
}
|
}
|
||||||
|
|
||||||
// WORKAROUND bug #903223: In Puerto Pollo, if you have Guybrush examine
|
// WORKAROUND bug #1493: In Puerto Pollo, if you have Guybrush examine
|
||||||
// the church clock, he'll read out the current time. Nice touch, only that
|
// the church clock, he'll read out the current time. Nice touch, only that
|
||||||
// it sounds crap in the german version (and maybe others, too). It seems
|
// it sounds crap in the german version (and maybe others, too). It seems
|
||||||
// the original engine of the german version played just a simple fixed
|
// the original engine of the german version played just a simple fixed
|
||||||
|
@ -1153,7 +1153,7 @@ void ScummEngine_v6::o6_walkActorToObj() {
|
||||||
} else {
|
} else {
|
||||||
a2 = derefActorSafe(obj, "o6_walkActorToObj(2)");
|
a2 = derefActorSafe(obj, "o6_walkActorToObj(2)");
|
||||||
if (_game.id == GID_SAMNMAX && a2 == 0) {
|
if (_game.id == GID_SAMNMAX && a2 == 0) {
|
||||||
// WORKAROUND bug #742676 SAM: Fish Farm. Note quite sure why it
|
// WORKAROUND bug #801 SAM: Fish Farm. Note quite sure why it
|
||||||
// happens, whether it's normal or due to a bug in the ScummVM code.
|
// happens, whether it's normal or due to a bug in the ScummVM code.
|
||||||
debug(0, "o6_walkActorToObj: invalid actor %d", obj);
|
debug(0, "o6_walkActorToObj: invalid actor %d", obj);
|
||||||
return;
|
return;
|
||||||
|
@ -1234,7 +1234,7 @@ void ScummEngine_v6::o6_animateActor() {
|
||||||
int act = pop();
|
int act = pop();
|
||||||
if (_game.id == GID_TENTACLE && _roomResource == 57 &&
|
if (_game.id == GID_TENTACLE && _roomResource == 57 &&
|
||||||
vm.slot[_currentScript].number == 19 && act == 593) {
|
vm.slot[_currentScript].number == 19 && act == 593) {
|
||||||
// WORKAROUND bug #743363: This very odd case (animateActor(593,250))
|
// WORKAROUND bug #813: This very odd case (animateActor(593,250))
|
||||||
// occurs in DOTT, in the cutscene after George cuts down the "cherry
|
// occurs in DOTT, in the cutscene after George cuts down the "cherry
|
||||||
// tree" and the tree Laverne is trapped in vanishes...
|
// tree" and the tree Laverne is trapped in vanishes...
|
||||||
// Not sure if this means animateActor somehow also must work for objects
|
// Not sure if this means animateActor somehow also must work for objects
|
||||||
|
@ -2220,7 +2220,7 @@ void ScummEngine_v6::o6_wait() {
|
||||||
break;
|
break;
|
||||||
return;
|
return;
|
||||||
case 232: // SO_WAIT_FOR_TURN
|
case 232: // SO_WAIT_FOR_TURN
|
||||||
// WORKAROUND for bug #744441: An angle will often be received as the
|
// WORKAROUND for bug #819: An angle will often be received as the
|
||||||
// actor number due to script bugs in The Dig. In all cases where this
|
// actor number due to script bugs in The Dig. In all cases where this
|
||||||
// occurs, _curActor is set just before it, so we can use it instead.
|
// occurs, _curActor is set just before it, so we can use it instead.
|
||||||
//
|
//
|
||||||
|
@ -2355,7 +2355,7 @@ void ScummEngine_v6::o6_printEgo() {
|
||||||
void ScummEngine_v6::o6_talkActor() {
|
void ScummEngine_v6::o6_talkActor() {
|
||||||
int offset = _scriptPointer - _scriptOrgPointer;
|
int offset = _scriptPointer - _scriptOrgPointer;
|
||||||
|
|
||||||
// WORKAROUND for bug #896489: see below for detailed description
|
// WORKAROUND for bug #1452: see below for detailed description
|
||||||
if (_forcedWaitForMessage) {
|
if (_forcedWaitForMessage) {
|
||||||
if (VAR(VAR_HAVE_MSG)) {
|
if (VAR(VAR_HAVE_MSG)) {
|
||||||
_scriptPointer--;
|
_scriptPointer--;
|
||||||
|
@ -2383,7 +2383,7 @@ void ScummEngine_v6::o6_talkActor() {
|
||||||
_string[0].loadDefault();
|
_string[0].loadDefault();
|
||||||
actorTalk(_scriptPointer);
|
actorTalk(_scriptPointer);
|
||||||
|
|
||||||
// WORKAROUND for bug #896489: "DIG: Missing subtitles when talking to Brink"
|
// WORKAROUND for bug #1452: "DIG: Missing subtitles when talking to Brink"
|
||||||
// Original script does not have wait.waitForMessage() after several messages:
|
// Original script does not have wait.waitForMessage() after several messages:
|
||||||
//
|
//
|
||||||
// [011A] (5D) if (getActorCostume(VAR_EGO) == 1) {
|
// [011A] (5D) if (getActorCostume(VAR_EGO) == 1) {
|
||||||
|
@ -2744,7 +2744,7 @@ void ScummEngine_v6::o6_kernelGetFunctions() {
|
||||||
|
|
||||||
switch (args[0]) {
|
switch (args[0]) {
|
||||||
case 113:
|
case 113:
|
||||||
// WORKAROUND for bug #899249: The scripts used for screen savers
|
// WORKAROUND for bug #1465: The scripts used for screen savers
|
||||||
// in Sam & Max use hard coded values for the maximum height and width.
|
// in Sam & Max use hard coded values for the maximum height and width.
|
||||||
// This causes problems in rooms (ie. Credits) where their values are
|
// This causes problems in rooms (ie. Credits) where their values are
|
||||||
// lower, so we set result to zero if out of bounds.
|
// lower, so we set result to zero if out of bounds.
|
||||||
|
|
|
@ -2386,7 +2386,7 @@ void ScummEngine::scummLoop(int delta) {
|
||||||
oldEgo = VAR(VAR_EGO);
|
oldEgo = VAR(VAR_EGO);
|
||||||
|
|
||||||
// In V1-V3 games, CHARSET_1 is called much earlier than in newer games.
|
// In V1-V3 games, CHARSET_1 is called much earlier than in newer games.
|
||||||
// See also bug #770042 for a case were this makes a difference.
|
// See also bug #987 for a case were this makes a difference.
|
||||||
if (_game.version <= 3)
|
if (_game.version <= 3)
|
||||||
CHARSET_1();
|
CHARSET_1();
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@ void ScummEngine::debugMessage(const byte *msg) {
|
||||||
b = buffer[10] | (buffer[11] << 8) | (buffer[14] << 16) | (buffer[15] << 24);
|
b = buffer[10] | (buffer[11] << 8) | (buffer[14] << 16) | (buffer[15] << 24);
|
||||||
|
|
||||||
// Sam and Max uses a caching system, printing empty messages
|
// Sam and Max uses a caching system, printing empty messages
|
||||||
// and setting VAR_V6_SOUNDMODE beforehand. See patch 609791.
|
// and setting VAR_V6_SOUNDMODE beforehand. See patch #8051.
|
||||||
if (_game.id == GID_SAMNMAX)
|
if (_game.id == GID_SAMNMAX)
|
||||||
channel = VAR(VAR_V6_SOUNDMODE);
|
channel = VAR(VAR_V6_SOUNDMODE);
|
||||||
|
|
||||||
|
@ -184,7 +184,7 @@ void ScummEngine_v6::drawBlastTexts() {
|
||||||
do {
|
do {
|
||||||
c = *buf++;
|
c = *buf++;
|
||||||
|
|
||||||
// FIXME: This is a workaround for bugs #864030 and #2440:
|
// FIXME: This is a workaround for bugs #1347 and #2440:
|
||||||
// In COMI, some text contains ASCII character 11 = 0xB. It's
|
// In COMI, some text contains ASCII character 11 = 0xB. It's
|
||||||
// not quite clear what it is good for; so for now we just ignore
|
// not quite clear what it is good for; so for now we just ignore
|
||||||
// it, which seems to match the original engine (BTW, traditionally,
|
// it, which seems to match the original engine (BTW, traditionally,
|
||||||
|
@ -1235,7 +1235,7 @@ int ScummEngine::convertMessageToString(const byte *msg, byte *dst, int dstSize)
|
||||||
if (chr == 0xFF) {
|
if (chr == 0xFF) {
|
||||||
chr = src[num++];
|
chr = src[num++];
|
||||||
|
|
||||||
// WORKAROUND for bug #985948, a script bug in Indy3. Apparently,
|
// WORKAROUND for bug #1675, a script bug in Indy3. Apparently,
|
||||||
// a german 'sz' was encoded incorrectly as 0xFF2E. We replace
|
// a german 'sz' was encoded incorrectly as 0xFF2E. We replace
|
||||||
// this by the correct encoding here. See also ScummEngine::resStrLen().
|
// this by the correct encoding here. See also ScummEngine::resStrLen().
|
||||||
if (_game.id == GID_INDY3 && chr == 0x2E) {
|
if (_game.id == GID_INDY3 && chr == 0x2E) {
|
||||||
|
@ -1732,7 +1732,7 @@ void ScummEngine_v7::loadLanguageBundle() {
|
||||||
while (*ptr == '\n' || *ptr == '\r')
|
while (*ptr == '\n' || *ptr == '\r')
|
||||||
*ptr++ = 0;
|
*ptr++ = 0;
|
||||||
|
|
||||||
// Convert '\n' code to a newline. See also bug #902415.
|
// Convert '\n' code to a newline. See also bug #1487.
|
||||||
char *src, *dst;
|
char *src, *dst;
|
||||||
src = dst = _languageBuffer + _languageIndex[i].offset;
|
src = dst = _languageBuffer + _languageIndex[i].offset;
|
||||||
while (*src) {
|
while (*src) {
|
||||||
|
|
|
@ -1411,7 +1411,7 @@ bool Logic::fnDrawScreen(uint32 a, uint32 b, uint32 c) {
|
||||||
_skyScreen->fnDrawScreen(a, b);
|
_skyScreen->fnDrawScreen(a, b);
|
||||||
|
|
||||||
if (Logic::_scriptVariables[SCREEN] == 32) {
|
if (Logic::_scriptVariables[SCREEN] == 32) {
|
||||||
/* workaround for script bug #786482
|
/* workaround for script bug #1140
|
||||||
Under certain circumstances, which never got completely cleared,
|
Under certain circumstances, which never got completely cleared,
|
||||||
the gardener can get stuck in an animation, waiting for a sync
|
the gardener can get stuck in an animation, waiting for a sync
|
||||||
signal from foster.
|
signal from foster.
|
||||||
|
|
|
@ -1238,7 +1238,7 @@ bool Sound::startSpeech(uint16 textNum) {
|
||||||
|
|
||||||
free(speechData);
|
free(speechData);
|
||||||
|
|
||||||
// Workaround for BASS bug #897775 - some voice-overs are played at
|
// Workaround for BASS bug #1461 - some voice-overs are played at
|
||||||
// half speed in 0.0368 (the freeware CD version), in 0.0372 they sound
|
// half speed in 0.0368 (the freeware CD version), in 0.0372 they sound
|
||||||
// just fine.
|
// just fine.
|
||||||
|
|
||||||
|
|
|
@ -244,7 +244,7 @@ DisplayedText Text::displayText(char *textPtr, uint8 *dest, bool center, uint16
|
||||||
uint32 numLines = 0;
|
uint32 numLines = 0;
|
||||||
_numLetters = 2;
|
_numLetters = 2;
|
||||||
|
|
||||||
// work around bug #778105 (line width exceeded)
|
// work around bug #1080 (line width exceeded)
|
||||||
char *tmpPtr = strstr(textPtr, "MUND-BEATMUNG!");
|
char *tmpPtr = strstr(textPtr, "MUND-BEATMUNG!");
|
||||||
if (tmpPtr)
|
if (tmpPtr)
|
||||||
strcpy(tmpPtr, "MUND BEATMUNG!");
|
strcpy(tmpPtr, "MUND BEATMUNG!");
|
||||||
|
|
|
@ -98,7 +98,7 @@ void Logic::initialize() {
|
||||||
void Logic::newScreen(uint32 screen) {
|
void Logic::newScreen(uint32 screen) {
|
||||||
Object *compact = (Object *)_objMan->fetchObject(PLAYER);
|
Object *compact = (Object *)_objMan->fetchObject(PLAYER);
|
||||||
|
|
||||||
// work around script bug #911508
|
// work around script bug #1520
|
||||||
if (((screen == 25) || (_scriptVars[SCREEN] == 25)) && (_scriptVars[SAND_FLAG] == 4)) {
|
if (((screen == 25) || (_scriptVars[SCREEN] == 25)) && (_scriptVars[SAND_FLAG] == 4)) {
|
||||||
Object *cpt = _objMan->fetchObject(SAND_25);
|
Object *cpt = _objMan->fetchObject(SAND_25);
|
||||||
Object *george = _objMan->fetchObject(PLAYER);
|
Object *george = _objMan->fetchObject(PLAYER);
|
||||||
|
@ -1212,7 +1212,7 @@ int Logic::fnTheyDo(Object *cpt, int32 id, int32 tar, int32 instruc, int32 param
|
||||||
//send an instruction to mega we're talking to and wait
|
//send an instruction to mega we're talking to and wait
|
||||||
//until it has finished before returning to script
|
//until it has finished before returning to script
|
||||||
int Logic::fnTheyDoWeWait(Object *cpt, int32 id, int32 tar, int32 instruc, int32 param1, int32 param2, int32 param3, int32 x) {
|
int Logic::fnTheyDoWeWait(Object *cpt, int32 id, int32 tar, int32 instruc, int32 param1, int32 param2, int32 param3, int32 x) {
|
||||||
// workaround for scriptbug #928791: Freeze at hospital
|
// workaround for script bug #1575: Freeze at hospital
|
||||||
// in at least one game version, a script forgets to set sam_returning back to zero
|
// in at least one game version, a script forgets to set sam_returning back to zero
|
||||||
if ((tar == SAM) && (instruc == INS_talk) && (param2 == 2162856))
|
if ((tar == SAM) && (instruc == INS_talk) && (param2 == 2162856))
|
||||||
_scriptVars[SAM_RETURNING] = 0;
|
_scriptVars[SAM_RETURNING] = 0;
|
||||||
|
|
|
@ -604,7 +604,7 @@ void Screen::verticalMask(uint16 x, uint16 y, uint16 bWidth, uint16 bHeight) {
|
||||||
|
|
||||||
for (uint16 blkx = 0; blkx < bWidth; blkx++) {
|
for (uint16 blkx = 0; blkx < bWidth; blkx++) {
|
||||||
// A sprite can be masked by several layers at the same time,
|
// A sprite can be masked by several layers at the same time,
|
||||||
// so we have to check them all. See bug #917427.
|
// so we have to check them all. See bug #1536.
|
||||||
for (int16 level = _roomDefTable[_currentScreen].totalLayers - 2; level >= 0; level--) {
|
for (int16 level = _roomDefTable[_currentScreen].totalLayers - 2; level >= 0; level--) {
|
||||||
if (_layerGrid[level][gridX + blkx + gridY * lGridSizeX]) {
|
if (_layerGrid[level][gridX + blkx + gridY * lGridSizeX]) {
|
||||||
uint16 *grid = _layerGrid[level] + gridX + blkx + gridY * lGridSizeX;
|
uint16 *grid = _layerGrid[level] + gridX + blkx + gridY * lGridSizeX;
|
||||||
|
|
|
@ -437,7 +437,7 @@ bool Screen::endRenderCycle() {
|
||||||
|
|
||||||
#ifdef LIMIT_FRAME_RATE
|
#ifdef LIMIT_FRAME_RATE
|
||||||
// Give the other threads some breathing space. This apparently helps
|
// Give the other threads some breathing space. This apparently helps
|
||||||
// against bug #875683, though I was never able to reproduce it for
|
// against bug #1386, though I was never able to reproduce it for
|
||||||
// myself.
|
// myself.
|
||||||
_vm->_system->delayMillis(10);
|
_vm->_system->delayMillis(10);
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue