[Scummvm-cvs-logs] scummvm master -> 23ed0f1dc89a8557692928785bf3da355e36bc8e

bluegr md5 at scummvm.org
Fri Jun 15 11:26:36 CEST 2012


This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
425926ed7e SCI: Limit floodfill hack to GK1
577d7e41c9 SCI: Change Script::getObject() to accept a reg_t
e1ae110860 SCI: Clean up the script initialization code
9aaefbd536 SCI: _propertyOffsetsSci3 and classpos should be 32-bit integers
23ed0f1dc8 SCI: Skip playing of the unsupported robot video 1003 in RAMA


Commit: 425926ed7ebde1fa77f3874498a6f285af75ac08
    https://github.com/scummvm/scummvm/commit/425926ed7ebde1fa77f3874498a6f285af75ac08
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2012-06-15T02:24:12-07:00

Commit Message:
SCI: Limit floodfill hack to GK1

Fixes the intro of LSL7 and the inventory screen in PQ4

Changed paths:
    engines/sci/graphics/frameout.cpp



diff --git a/engines/sci/graphics/frameout.cpp b/engines/sci/graphics/frameout.cpp
index db49497..dff3324 100644
--- a/engines/sci/graphics/frameout.cpp
+++ b/engines/sci/graphics/frameout.cpp
@@ -647,7 +647,7 @@ void GfxFrameout::kernelFrameout() {
 		// Since I first wrote the patch, the race has stopped occurring for me though.
 		// I'll leave this for investigation later, when someone can reproduce.
 		//if (it->pictureId == kPlanePlainColored)	// FIXME: This is what SSCI does, and fixes the intro of LSL7, but breaks the dialogs in GK1 (adds black boxes)
-		if (it->pictureId == kPlanePlainColored && it->planeBack)
+		if (it->pictureId == kPlanePlainColored && (it->planeBack || g_sci->getGameId() != GID_GK1))
 			_paint32->fillRect(it->planeRect, it->planeBack);
 
 		_coordAdjuster->pictureSetDisplayArea(it->planeRect);


Commit: 577d7e41c9ca2c498dc85e41c373fbdca8d2ed41
    https://github.com/scummvm/scummvm/commit/577d7e41c9ca2c498dc85e41c373fbdca8d2ed41
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2012-06-15T02:24:14-07:00

Commit Message:
SCI: Change Script::getObject() to accept a reg_t

This is needed for upcoming changes to the Script class

Changed paths:
    engines/sci/engine/kernel.cpp
    engines/sci/engine/script.cpp
    engines/sci/engine/script.h
    engines/sci/engine/seg_manager.cpp



diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp
index c99bc4f..0266414 100644
--- a/engines/sci/engine/kernel.cpp
+++ b/engines/sci/engine/kernel.cpp
@@ -377,7 +377,7 @@ uint16 Kernel::findRegType(reg_t reg) {
 		if (reg.offset <= (*(Script *)mobj).getBufSize() &&
 			reg.offset >= -SCRIPT_OBJECT_MAGIC_OFFSET &&
 		    RAW_IS_OBJECT((*(Script *)mobj).getBuf(reg.offset)) ) {
-			result |= ((Script *)mobj)->getObject(reg.offset) ? SIG_TYPE_OBJECT : SIG_TYPE_REFERENCE;
+			result |= ((Script *)mobj)->getObject(reg) ? SIG_TYPE_OBJECT : SIG_TYPE_REFERENCE;
 		} else
 			result |= SIG_TYPE_REFERENCE;
 		break;
diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp
index 5f0118b..08f7922 100644
--- a/engines/sci/engine/script.cpp
+++ b/engines/sci/engine/script.cpp
@@ -243,16 +243,16 @@ const byte *Script::getSci3ObjectsPointer() {
 	return ptr;
 }
 
-Object *Script::getObject(uint16 offset) {
-	if (_objects.contains(offset))
-		return &_objects[offset];
+Object *Script::getObject(reg_t pos) {
+	if (_objects.contains(pos.offset))
+		return &_objects[pos.offset];
 	else
 		return 0;
 }
 
-const Object *Script::getObject(uint16 offset) const {
-	if (_objects.contains(offset))
-		return &_objects[offset];
+const Object *Script::getObject(reg_t pos) const {
+	if (_objects.contains(pos.offset))
+		return &_objects[pos.offset];
 	else
 		return 0;
 }
@@ -746,7 +746,7 @@ Common::Array<reg_t> Script::listAllDeallocatable(SegmentId segId) const {
 Common::Array<reg_t> Script::listAllOutgoingReferences(reg_t addr) const {
 	Common::Array<reg_t> tmp;
 	if (addr.offset <= _bufSize && addr.offset >= -SCRIPT_OBJECT_MAGIC_OFFSET && RAW_IS_OBJECT(_buf + addr.offset)) {
-		const Object *obj = getObject(addr.offset);
+		const Object *obj = getObject(addr);
 		if (obj) {
 			// Note all local variables, if we have a local variable environment
 			if (_localsSegment)
diff --git a/engines/sci/engine/script.h b/engines/sci/engine/script.h
index a180579..06a7f08 100644
--- a/engines/sci/engine/script.h
+++ b/engines/sci/engine/script.h
@@ -119,8 +119,8 @@ public:
 
 	virtual void saveLoadWithSerializer(Common::Serializer &ser);
 
-	Object *getObject(uint16 offset);
-	const Object *getObject(uint16 offset) const;
+	Object *getObject(reg_t pos);
+	const Object *getObject(reg_t pos) const;
 
 	/**
 	 * Initializes an object within the segment manager
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp
index cc127c8..cfa83a7 100644
--- a/engines/sci/engine/seg_manager.cpp
+++ b/engines/sci/engine/seg_manager.cpp
@@ -228,7 +228,7 @@ Object *SegManager::getObject(reg_t pos) const {
 			Script *scr = (Script *)mobj;
 			if (pos.offset <= scr->getBufSize() && pos.offset >= -SCRIPT_OBJECT_MAGIC_OFFSET
 			        && RAW_IS_OBJECT(scr->getBuf(pos.offset))) {
-				obj = scr->getObject(pos.offset);
+				obj = scr->getObject(pos);
 			}
 		}
 	}


Commit: e1ae1108601cce0ad7aeab5f3e017f630f02e7ea
    https://github.com/scummvm/scummvm/commit/e1ae1108601cce0ad7aeab5f3e017f630f02e7ea
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2012-06-15T02:24:16-07:00

Commit Message:
SCI: Clean up the script initialization code

Changed paths:
    engines/sci/engine/script.cpp



diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp
index 08f7922..f8c5539 100644
--- a/engines/sci/engine/script.cpp
+++ b/engines/sci/engine/script.cpp
@@ -37,17 +37,22 @@ Script::Script() : SegmentObj(SEG_TYPE_SCRIPT) {
 	_buf = NULL;
 	_bufSize = 0;
 	_scriptSize = 0;
-	_heapSize = 0;
 
-	_synonyms = NULL;
 	_heapStart = NULL;
+	_heapSize = 0;
+
 	_exportTable = NULL;
+	_numExports = 0;
+	_synonyms = NULL;
+	_numSynonyms = 0;
 
 	_localsOffset = 0;
 	_localsSegment = 0;
 	_localsBlock = NULL;
 	_localsCount = 0;
 
+	_lockers = 1;
+
 	_markedAsDeleted = false;
 }
 
@@ -65,25 +70,11 @@ void Script::freeScript() {
 
 void Script::init(int script_nr, ResourceManager *resMan) {
 	Resource *script = resMan->findResource(ResourceId(kResourceTypeScript, script_nr), 0);
-
 	if (!script)
 		error("Script %d not found", script_nr);
 
-	_localsOffset = 0;
-	_localsBlock = NULL;
-	_localsCount = 0;
-
-	_markedAsDeleted = false;
-
 	_nr = script_nr;
-	_buf = 0;
-	_heapStart = 0;
-
-	_scriptSize = script->size;
-	_bufSize = script->size;
-	_heapSize = 0;
-
-	_lockers = 1;
+	_bufSize = _scriptSize = script->size;
 
 	if (getSciVersion() == SCI_VERSION_0_EARLY) {
 		_bufSize += READ_LE_UINT16(script->data) * 2;
@@ -163,11 +154,6 @@ void Script::load(ResourceManager *resMan) {
 		memcpy(_heapStart, heap->data, heap->size);
 	}
 
-	_exportTable = 0;
-	_numExports = 0;
-	_synonyms = 0;
-	_numSynonyms = 0;
-
 	if (getSciVersion() <= SCI_VERSION_1_LATE) {
 		_exportTable = (const uint16 *)findBlockSCI0(SCI_OBJ_EXPORTS);
 		if (_exportTable) {


Commit: 9aaefbd53665cd03359ad692d64e3fc437f97202
    https://github.com/scummvm/scummvm/commit/9aaefbd53665cd03359ad692d64e3fc437f97202
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2012-06-15T02:24:18-07:00

Commit Message:
SCI: _propertyOffsetsSci3 and classpos should be 32-bit integers

These are needed for future handling of large SCI3 script files

Changed paths:
    engines/sci/engine/object.cpp
    engines/sci/engine/object.h
    engines/sci/engine/script.cpp



diff --git a/engines/sci/engine/object.cpp b/engines/sci/engine/object.cpp
index 78e216c..2a0ed38 100644
--- a/engines/sci/engine/object.cpp
+++ b/engines/sci/engine/object.cpp
@@ -112,7 +112,7 @@ bool Object::relocateSci0Sci21(SegmentId segment, int location, size_t scriptSiz
 	return relocateBlock(_variables, getPos().offset, segment, location, scriptSize);
 }
 
-bool Object::relocateSci3(SegmentId segment, int location, int offset, size_t scriptSize) {
+bool Object::relocateSci3(SegmentId segment, uint32 location, int offset, size_t scriptSize) {
 	assert(_propertyOffsetsSci3);
 
 	for (uint i = 0; i < _variables.size(); ++i) {
@@ -286,7 +286,7 @@ void Object::initSelectorsSci3(const byte *buf) {
 	_variables.resize(properties);
 	uint16 *propertyIds = (uint16 *)malloc(sizeof(uint16) * properties);
 //	uint16 *methodOffsets = (uint16 *)malloc(sizeof(uint16) * 2 * methods);
-	uint16 *propertyOffsets = (uint16 *)malloc(sizeof(uint16) * properties);
+	uint32 *propertyOffsets = (uint32 *)malloc(sizeof(uint32) * properties);
 	int propertyCounter = 0;
 	int methodCounter = 0;
 
@@ -314,7 +314,8 @@ void Object::initSelectorsSci3(const byte *buf) {
 					WRITE_SCI11ENDIAN_UINT16(&propertyIds[propertyCounter],
 					                         groupBaseId + bit);
 					_variables[propertyCounter] = make_reg(0, value);
-					propertyOffsets[propertyCounter] = (seeker + bit * 2) - buf;
+					uint32 propertyOffset = (seeker + bit * 2) - buf;
+					propertyOffsets[propertyCounter] = propertyOffset;
 					++propertyCounter;
 				} else if (value != 0xffff) { // Method
 					_baseMethod.push_back(groupBaseId + bit);
diff --git a/engines/sci/engine/object.h b/engines/sci/engine/object.h
index 0ca16b4..e8deafa 100644
--- a/engines/sci/engine/object.h
+++ b/engines/sci/engine/object.h
@@ -223,7 +223,7 @@ public:
 	}
 
 	bool relocateSci0Sci21(SegmentId segment, int location, size_t scriptSize);
-	bool relocateSci3(SegmentId segment, int location, int offset, size_t scriptSize);
+	bool relocateSci3(SegmentId segment, uint32 location, int offset, size_t scriptSize);
 
 	int propertyOffsetToId(SegManager *segMan, int propertyOffset) const;
 
@@ -238,7 +238,7 @@ private:
 	const byte *_baseObj; /**< base + object offset within base */
 	const uint16 *_baseVars; /**< Pointer to the varselector area for this object */
 	Common::Array<uint16> _baseMethod; /**< Pointer to the method selector area for this object */
-	uint16 *_propertyOffsetsSci3; /**< This is used to enable relocation of property valuesa in SCI3 */
+	uint32 *_propertyOffsetsSci3; /**< This is used to enable relocation of property valuesa in SCI3 */
 
 	Common::Array<reg_t> _variables;
 	uint16 _methodCount;
diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp
index f8c5539..18e23f3 100644
--- a/engines/sci/engine/script.cpp
+++ b/engines/sci/engine/script.cpp
@@ -546,7 +546,7 @@ void Script::initializeClasses(SegManager *segMan) {
 
 	uint16 marker;
 	bool isClass = false;
-	uint16 classpos;
+	uint32 classpos;
 	int16 species = 0;
 
 	while (true) {


Commit: 23ed0f1dc89a8557692928785bf3da355e36bc8e
    https://github.com/scummvm/scummvm/commit/23ed0f1dc89a8557692928785bf3da355e36bc8e
Author: Filippos Karapetis (md5 at scummvm.org)
Date: 2012-06-15T02:24:20-07:00

Commit Message:
SCI: Skip playing of the unsupported robot video 1003 in RAMA

Changed paths:
    engines/sci/video/robot_decoder.cpp



diff --git a/engines/sci/video/robot_decoder.cpp b/engines/sci/video/robot_decoder.cpp
index 95b3c2a..8ffcecc 100644
--- a/engines/sci/video/robot_decoder.cpp
+++ b/engines/sci/video/robot_decoder.cpp
@@ -87,6 +87,13 @@ RobotDecoder::~RobotDecoder() {
 }
 
 bool RobotDecoder::load(GuiResourceId id) {
+	// TODO: RAMA's robot 1003 cannot be played (shown at the menu screen) - 
+	// its drawn at odd coordinates. SV can't play it either (along with some
+	// others), so it must be some new functionality added in RAMA's robot
+	// videos. Skip it for now.
+	if (g_sci->getGameId() == GID_RAMA && id == 1003)
+		return false;
+
 	Common::String fileName = Common::String::format("%d.rbt", id);
 	Common::SeekableReadStream *stream = SearchMan.createReadStreamForMember(fileName);
 






More information about the Scummvm-git-logs mailing list