mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-22 12:12:16 +00:00
SCUMM: Replicate the original clock tower behavior (COMI)
Guybrush can read the clock of Puerto Pollo, but this was only enabled in the English, Italian and (fan-made) Russian releases, probably because the result was poor for the other languages. The German, French, Spanish, Brazilian Portuguese and CJK releases disabled this feature, but the check was done in the interpreter, not in the scripts. This replicates this original behavior. Findings and ScummEngine_v7::actorTalk() change by AndywinXp.
This commit is contained in:
parent
2d2d61f8ff
commit
b41d3f4eea
@ -20,6 +20,7 @@
|
||||
*/
|
||||
|
||||
#include "common/system.h" // for setFocusRectangle/clearFocusRectangle
|
||||
#include "common/scummsys.h"
|
||||
#include "scumm/scumm.h"
|
||||
#include "scumm/actor.h"
|
||||
#include "scumm/actor_he.h"
|
||||
@ -628,7 +629,7 @@ int Actor_v3::actorWalkStep() {
|
||||
// The next two lines fix bug #12278 for ZAK FM-TOWNS (SCUMM3). They are alse required for SCUMM 1/2 to prevent movement while
|
||||
// turning, but only if the character has to make a turn. The correct behavior for v1/2 can be tested by letting Zak (only v1/2
|
||||
// versions) walk in the starting room from the torn wallpaper to the desk drawer: Zak should first turn around clockwise by
|
||||
// 180<EFBFBD>, then walk one step to the left, then turn clockwise 90<39>. For ZAK FM-TOWNS (SCUMM3) this part will look quite different
|
||||
// 180°, then walk one step to the left, then turn clockwise 90°. For ZAK FM-TOWNS (SCUMM3) this part will look quite different
|
||||
// (and a bit weird), but I have confirmed the correctness with the FM-Towns emulator, too.
|
||||
if (_vm->_game.version == 3 || (_vm->_game.version <= 2 && (_moving & MF_TURN)))
|
||||
return 1;
|
||||
@ -2891,6 +2892,20 @@ void ScummEngine_v7::actorTalk(const byte *msg) {
|
||||
bool stringWrap = false;
|
||||
bool usingOldSystem = (_game.id == GID_FT) || (_game.id == GID_DIG && _game.features & GF_DEMO);
|
||||
|
||||
// WORKAROUND bug #1493: In Puerto Pollo, if you have Guybrush examine
|
||||
// the church clock, he'll read out the current time. However, this was
|
||||
// disabled in some releases, possibly because of the poor results for
|
||||
// some languages (e.g. German, French). The check was done inside the
|
||||
// original interpreters, so we replicate their behavior.
|
||||
if (_game.id == GID_CMI && _language != Common::EN_ANY && _language != Common::IT_ITA && _language != Common::RU_RUS) {
|
||||
if (strncmp((const char *)msg, "/CKGT326/", 9) == 0)
|
||||
msg = (const byte *)"/VDSO325/Whoa! Look at the time. Gotta scoot.";
|
||||
|
||||
// Reject every line which begins with the CKGT tag ("ClocK Guybrush Threepwood")
|
||||
if (strncmp((const char *)msg, "/CKGT", 5) == 0)
|
||||
return;
|
||||
}
|
||||
|
||||
convertMessageToString(msg, _charsetBuffer, sizeof(_charsetBuffer));
|
||||
|
||||
// Play associated speech, if any
|
||||
|
@ -763,24 +763,6 @@ void ScummEngine_v6::o6_startScript() {
|
||||
o6_breakHere();
|
||||
}
|
||||
|
||||
// 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
|
||||
// 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
|
||||
// text in this spot, for the above reason. Since the data files are
|
||||
// unchanged, it must have been an engine hack job. No idea how they did
|
||||
// it exactly, but this here is how we do it :-)
|
||||
if (_game.id == GID_CMI && script == 204 &&
|
||||
_currentRoom == 15 && vm.slot[_currentScript].number == 421 &&
|
||||
_language == Common::DE_DEU) {
|
||||
|
||||
_actorToPrintStrFor = 1;
|
||||
_string[0].loadDefault();
|
||||
actorTalk((const byte *)"/VDSO325/Whoa! Look at the time. Gotta scoot.");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
runScript(script, (flags & 1) != 0, (flags & 2) != 0, args);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user