[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