SCUMM: Adjust timings for Italian Sam & Max intro.

This commit is contained in:
Torbjörn Andersson 2022-04-01 17:36:51 +02:00 committed by Torbjörn Andersson
parent 54fd5caac8
commit 127976b510
2 changed files with 45 additions and 7 deletions

View file

@ -661,6 +661,12 @@ void ScummEngine::writeVar(uint var, int value) {
// "Wirst Du brutzeln, wie eine grobe Bratwurst!" // "Wirst Du brutzeln, wie eine grobe Bratwurst!"
if (value == 1 && _language == Common::DE_DEU) if (value == 1 && _language == Common::DE_DEU)
value = 4; value = 4;
// Max beats up the scientist. This was probably to
// match the subtitles to the speech better, but this
// is just too much!
if (value == 2 && _language == Common::IT_ITA)
value = 3;
} }
_scummVars[var] = value; _scummVars[var] = value;

View file

@ -72,19 +72,32 @@ void ScummEngine::printString(int m, const byte *msg) {
return; return;
} }
// WORKAROUND bug #13378: Sam's reactions during the intro run // WORKAROUND bug #13378: In the German version, Sam's reactions
// much too quick for the subtitles in some localizations. We // to Max beating up the scientist run much too quick for the
// get around this by slowing down that entire animation, while // animation to match. We get around this by slowing down that
// leaving the reset of the animations unchanged. // animation.
// //
// The animation speed is not very fine grained, though. // In the italian version, the whole scene is sped up to keep up
// with Sam's speech. We compensate for this by slowing down the
// other animations.
if (_game.id == GID_SAMNMAX && vm.slot[_currentScript].number == 65 && _enableEnhancements) { if (_game.id == GID_SAMNMAX && vm.slot[_currentScript].number == 65 && _enableEnhancements) {
Actor *a;
if (_language == Common::DE_DEU) { if (_language == Common::DE_DEU) {
if (memcmp(msg + 16, "Ohh!", 4) == 0) { if (memcmp(msg + 16, "Ohh!", 4) == 0) {
Actor *a = derefActorSafe(2, "printString"); a = derefActorSafe(2, "printString");
if (a) if (a)
a->setAnimSpeed(3); a->setAnimSpeed(3);
} }
} else if (_language == Common::IT_ITA) {
if (memcmp(msg + 16, "Ooh.", 4) == 0) {
a = derefActorSafe(3, "printString");
if (a)
a->setAnimSpeed(2);
a = derefActorSafe(10, "printString");
if (a)
a->setAnimSpeed(2);
}
} }
} }
@ -217,11 +230,30 @@ bool ScummEngine::handleNextCharsetCode(Actor *a, int *code) {
{ "Kann ich fahren?", 240, 0 } { "Kann ich fahren?", 240, 0 }
}; };
TimingAdjustment timingAdjustmentsIT[] = {
{ "E per questo^", 120, 0 },
{ "Forse sei", 75, 0 },
{ "^imprevedibile.", 170, 0 },
{ "Oh.", 20, 0 },
{ "Ehi, bel colpo.", 30, 0 },
{ "Yikes!", 90, 0 },
{ "Huh?", 50, 0 },
{ "Posso tenere", 100, 0 },
{ "Perch\x82 pensi", 120, 0 },
{ "Andiamocene", 250, 0 },
{ "Forse possiamo", 90, 0 },
{ "Ti dispiace", 200, 0 }
};
switch (_language) { switch (_language) {
case Common::DE_DEU: case Common::DE_DEU:
adjustments = timingAdjustmentsDE; adjustments = timingAdjustmentsDE;
numAdjustments = ARRAYSIZE(timingAdjustmentsDE); numAdjustments = ARRAYSIZE(timingAdjustmentsDE);
break; break;
case Common::IT_ITA:
adjustments = timingAdjustmentsIT;
numAdjustments = ARRAYSIZE(timingAdjustmentsIT);
break;
default: default:
adjustments = nullptr; adjustments = nullptr;
numAdjustments = 0; numAdjustments = 0;