aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2003-04-28 13:16:16 +0000
committerMax Horn2003-04-28 13:16:16 +0000
commitdc7446f46986d396a92566b9c561645bdfa00e65 (patch)
tree6da3ac4ff2ec91d2df910f3d68f035629e01b503
parenta1a8c3ed0515f471532975c7315df70e06c6c366 (diff)
downloadscummvm-rg350-dc7446f46986d396a92566b9c561645bdfa00e65.tar.gz
scummvm-rg350-dc7446f46986d396a92566b9c561645bdfa00e65.tar.bz2
scummvm-rg350-dc7446f46986d396a92566b9c561645bdfa00e65.zip
make it possible to override dump length in Scumm::dumpResource; fix V2 entry script offset (I believe); fix exit script dumping for GF_OLD_BUNDLE games
svn-id: r7176
-rw-r--r--scumm/scumm.h2
-rw-r--r--scumm/scummvm.cpp19
2 files changed, 13 insertions, 8 deletions
diff --git a/scumm/scumm.h b/scumm/scumm.h
index c0d5def7ab..288849c9f8 100644
--- a/scumm/scumm.h
+++ b/scumm/scumm.h
@@ -627,7 +627,7 @@ protected:
void expireResources(uint32 size);
void freeResources();
void destroy();
- void dumpResource(char *tag, int index, byte *ptr);
+ void dumpResource(char *tag, int index, byte *ptr, int length = -1);
public:
/* Should be in Object class */
diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp
index 76f7cb13aa..c055eb302e 100644
--- a/scumm/scummvm.cpp
+++ b/scumm/scummvm.cpp
@@ -931,23 +931,26 @@ void Scumm::initRoomSubBlocks() {
//
// Look for an exit script
//
- if (_features & GF_AFTER_V2)
+ int EXCD_len = -1;
+ if (_features & GF_AFTER_V2) {
_EXCD_offs = READ_LE_UINT16(roomptr + 0x18);
- else if (_features & GF_OLD_BUNDLE)
+ EXCD_len = READ_LE_UINT16(roomptr + 0x1A) - _EXCD_offs + _resourceHeaderSize; // HACK
+ } else if (_features & GF_OLD_BUNDLE) {
_EXCD_offs = READ_LE_UINT16(roomptr + 0x19);
- else {
+ EXCD_len = READ_LE_UINT16(roomptr + 0x1B) - _EXCD_offs + _resourceHeaderSize; // HACK
+ } else {
ptr = findResourceData(MKID('EXCD'), roomResPtr);
if (ptr)
_EXCD_offs = ptr - roomResPtr;
}
if (_dumpScripts && _EXCD_offs)
- dumpResource("exit-", _roomResource, roomResPtr + _EXCD_offs - _resourceHeaderSize);
+ dumpResource("exit-", _roomResource, roomResPtr + _EXCD_offs - _resourceHeaderSize, EXCD_len);
//
// Look for an entry script
//
if (_features & GF_AFTER_V2)
- _ENCD_offs = READ_LE_UINT16(roomptr + 0x1C);
+ _ENCD_offs = READ_LE_UINT16(roomptr + 0x1A);
else if (_features & GF_OLD_BUNDLE)
_ENCD_offs = READ_LE_UINT16(roomptr + 0x1B);
else {
@@ -1210,12 +1213,14 @@ void Scumm::setScaleSlot(int slot, int x1, int y1, int scale1, int x2, int y2, i
_scaleSlots[slot-1].scale1 = scale1;
}
-void Scumm::dumpResource(char *tag, int idx, byte *ptr) {
+void Scumm::dumpResource(char *tag, int idx, byte *ptr, int length) {
char buf[256];
File out;
uint32 size;
- if (_features & GF_OLD_BUNDLE)
+ if (length >= 0)
+ size = length;
+ else if (_features & GF_OLD_BUNDLE)
size = READ_LE_UINT16(ptr);
else if (_features & GF_SMALL_HEADER)
size = READ_LE_UINT32(ptr);