aboutsummaryrefslogtreecommitdiff
path: root/scumm/script.cpp
diff options
context:
space:
mode:
authorMax Horn2002-12-27 15:11:43 +0000
committerMax Horn2002-12-27 15:11:43 +0000
commit6311835f798542c9506365bf7cd2102096df7ff5 (patch)
tree9ff76c982db0bd9bf2fe5cb763ed24b2792da3ad /scumm/script.cpp
parent8049e0625811b4fef2113f08a348cb6fba273cbf (diff)
downloadscummvm-rg350-6311835f798542c9506365bf7cd2102096df7ff5.tar.gz
scummvm-rg350-6311835f798542c9506365bf7cd2102096df7ff5.tar.bz2
scummvm-rg350-6311835f798542c9506365bf7cd2102096df7ff5.zip
fixed verb entry code for V8
svn-id: r6199
Diffstat (limited to 'scumm/script.cpp')
-rw-r--r--scumm/script.cpp38
1 files changed, 26 insertions, 12 deletions
diff --git a/scumm/script.cpp b/scumm/script.cpp
index b694ef02b8..3f5d5edd9b 100644
--- a/scumm/script.cpp
+++ b/scumm/script.cpp
@@ -883,18 +883,32 @@ int Scumm::getVerbEntrypoint(int obj, int entry)
if (!(_features & GF_SMALL_HEADER))
verbptr += _resourceHeaderSize;
- do {
- if (!*verbptr)
- return 0;
- if (*verbptr == entry || *verbptr == 0xFF)
- break;
- verbptr += 3;
- } while (1);
-
- if (_features & GF_SMALL_HEADER)
- return READ_LE_UINT16(verbptr + 1);
- else
- return verboffs + READ_LE_UINT16(verbptr + 1);
+ if (_features & GF_AFTER_V8) {
+ uint32 *ptr = (uint32 *)verbptr;
+ uint32 verb;
+ do {
+ verb = READ_LE_UINT32(ptr);
+ if (!verb)
+ return 0;
+ if (verb == (uint32)entry || verb == 0xFFFFFFFF)
+ break;
+ ptr += 2;
+ } while (1);
+ return verboffs + 8 + READ_LE_UINT32(ptr + 1);
+ } else {
+ do {
+ if (!*verbptr)
+ return 0;
+ if (*verbptr == entry || *verbptr == 0xFF)
+ break;
+ verbptr += 3;
+ } while (1);
+
+ if (_features & GF_SMALL_HEADER)
+ return READ_LE_UINT16(verbptr + 1);
+ else
+ return verboffs + READ_LE_UINT16(verbptr + 1);
+ }
}
void Scumm::endCutscene()