aboutsummaryrefslogtreecommitdiff
path: root/engines/cine
diff options
context:
space:
mode:
authorTravis Howell2009-07-13 23:36:22 +0000
committerTravis Howell2009-07-13 23:36:22 +0000
commit6f66d6a42565a803aac300eb6e8541029f682a01 (patch)
tree6842fbe974a46ceeb965c3a2e2010a1fa79abfe7 /engines/cine
parentf7a2a9170ff9cbb3b71025c51b4fd870294b5a13 (diff)
parent581be82b8366bca93fc3ea1c70b7aec921ad56a2 (diff)
downloadscummvm-rg350-6f66d6a42565a803aac300eb6e8541029f682a01.tar.gz
scummvm-rg350-6f66d6a42565a803aac300eb6e8541029f682a01.tar.bz2
scummvm-rg350-6f66d6a42565a803aac300eb6e8541029f682a01.zip
Merged revisions 42433-42434,42436,42439-42441,42443-42446,42455-42456,42458-42459 via svnmerge from
https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk ........ r42433 | sunmax | 2009-07-13 10:55:30 +1000 (Mon, 13 Jul 2009) | 5 lines Reverted my previous change (fprintf vs fputs), and properly implemented fputs for stderr case on PS2 ;-) ........ r42434 | Kirben | 2009-07-13 17:55:11 +1000 (Mon, 13 Jul 2009) | 1 line Fix bug #2820472 - MAZE: Keyboard input fault. ........ r42436 | wjpalenstijn | 2009-07-14 00:46:14 +1000 (Tue, 14 Jul 2009) | 1 line Add one more type of IQ-points filename (for bug #2820803) ........ r42439 | buddha_ | 2009-07-14 02:52:09 +1000 (Tue, 14 Jul 2009) | 1 line Fix for bug #2669415 (FW: half walking speed in a screen). ........ r42440 | buddha_ | 2009-07-14 03:09:40 +1000 (Tue, 14 Jul 2009) | 1 line Fix compilation under Windows (The fabs-calls were causing error C2668 about 'ambiguous call to overloaded function'). ........ r42441 | sev | 2009-07-14 03:28:49 +1000 (Tue, 14 Jul 2009) | 2 lines Add Drascula engine to the credits ........ r42443 | lordhoto | 2009-07-14 03:48:13 +1000 (Tue, 14 Jul 2009) | 1 line Got rid of Screen_LoL::_paletteConvTable. ........ r42444 | lordhoto | 2009-07-14 04:31:42 +1000 (Tue, 14 Jul 2009) | 1 line Support transparent guioptions update on game launch for AdvancedMetaEngine. ........ r42445 | lordhoto | 2009-07-14 04:32:03 +1000 (Tue, 14 Jul 2009) | 1 line Add transparent GUI options update for SCUMM too. ........ r42446 | lordhoto | 2009-07-14 04:47:32 +1000 (Tue, 14 Jul 2009) | 1 line Refactor GUI options update into a function in Common: updateGameGUIOptions. ........ r42455 | fingolfin | 2009-07-14 08:08:56 +1000 (Tue, 14 Jul 2009) | 1 line Unify PS2 and non-PS2 alloc code in Common::Array code (if this causes regressions somewhere, we better find a fix that also works on PS2) ........ r42456 | cyx | 2009-07-14 08:11:54 +1000 (Tue, 14 Jul 2009) | 1 line tucker: fixed issues with dirty rects handling (tracker item #2597763) ........ r42458 | cyx | 2009-07-14 08:19:10 +1000 (Tue, 14 Jul 2009) | 1 line tucker: added workaround for original game glitch (tracker item #2597763) ........ r42459 | fingolfin | 2009-07-14 08:19:33 +1000 (Tue, 14 Jul 2009) | 1 line Completed name of the creator of our logo ........ svn-id: r42462
Diffstat (limited to 'engines/cine')
-rw-r--r--engines/cine/script_fw.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/engines/cine/script_fw.cpp b/engines/cine/script_fw.cpp
index 0c92beb650..a9824674e6 100644
--- a/engines/cine/script_fw.cpp
+++ b/engines/cine/script_fw.cpp
@@ -1443,6 +1443,38 @@ int FWScript::o1_palRotate() {
int FWScript::o1_break() {
debugC(5, kCineDebugScript, "Line: %d: break", _line);
+ // WORKAROUND for bug #2669415 ("FW: half walking speed in a screen").
+ // The problem was that in Amiga/Atari ST versions of Future Wars the
+ // walking speed has halved in a forest scene where a monk's robe hangs
+ // on a tree branch (Up and to the left from the medieval castle's front).
+ //
+ // Initialization script for the scene is PART02.PRC's 26th script (011_INIT)
+ // and the background used in the scene is L11.PI1. The difference between
+ // the PC version and the Amiga/Atari ST version of the script is that the
+ // PC version calls scripts 37 and 36 for handling movement of the character
+ // when Amiga/Atari ST version calls scripts 22 and 21 for the same purpose
+ // (Scripts 37 and 22 handle vertical movement, 36 and 21 the horizontal).
+ //
+ // The called scripts only differ functionally so that all BREAK opcodes have been
+ // doubled in the Amiga/Atari ST versions (i.e. one BREAK has become two BREAKs)
+ // and in script 21 after LABEL_25 there's an extra opcode that isn't in script 36:
+ // SET globalvars[251], 0.
+ //
+ // As a BREAK opcode stops the execution of a script it causes a pause and
+ // with the BREAKs doubled the pause is twice as long in the Amiga/Atari ST versions.
+ // Thus the longer pause is eliminated by running only one BREAK when several
+ // are designated (i.e. ignoring a BREAK if there's another BREAK after it).
+ //
+ // TODO: Check whether the speed is halved in any other scenes in Amiga/Atari ST versions under ScummVM
+ // TODO: Check whether the speed is halved when running the original executable under an emulator
+ if (g_cine->getGameType() == Cine::GType_FW &&
+ (g_cine->getPlatform() == Common::kPlatformAmiga || g_cine->getPlatform() == Common::kPlatformAtariST) &&
+ _pos < _script._size && _script.getByte(_pos) == (0x4F + 1) && // Is the next opcode a BREAK too?
+ scumm_stricmp(currentPrcName, "PART02.PRC") == 0 &&
+ scumm_stricmp(renderer->getBgName(), "L11.PI1") == 0) {
+ return 0;
+ }
+
return 1;
}