diff --git a/scumm/object.cpp b/scumm/object.cpp index 26d13c8d80b..bf2676f6cca 100644 --- a/scumm/object.cpp +++ b/scumm/object.cpp @@ -826,7 +826,7 @@ void Scumm::addObjectToInventory(uint obj, uint room) { int i, slot; uint32 size; - byte *obcdptr, *ptr; + byte *ptr, *dst; FindObjectInRoom foir; debug(1, "Adding object %d from room %d into inventory", obj, room); @@ -836,24 +836,23 @@ void Scumm::addObjectToInventory(uint obj, uint room) i = getObjectIndex(obj); ptr = getResourceAddress(rtFlObject, _objs[i].fl_object_index) + 8; size = READ_BE_UINT32_UNALIGNED(ptr + 4); - slot = getInventorySlot(); - _inventory[slot] = obj; - createResource(rtInventory, slot, size); - ptr = getResourceAddress(rtFlObject, _objs[i].fl_object_index) + 8; - memcpy(getResourceAddress(rtInventory, slot), ptr, size); } else { findObjectInRoom(&foir, foCodeHeader, obj, room); if (_features & GF_SMALL_HEADER) size = READ_LE_UINT32(foir.obcd); else size = READ_BE_UINT32_UNALIGNED(foir.obcd + 4); - slot = getInventorySlot(); - _inventory[slot] = obj; - createResource(rtInventory, slot, size); - obcdptr = getResourceAddress(rtRoom, room) - foir.roomptr + foir.obcd; - memcpy(getResourceAddress(rtInventory, slot), obcdptr, size); + ptr = foir.obcd; } + slot = getInventorySlot(); + _inventory[slot] = obj; + createResource(rtInventory, slot, size); + + dst = getResourceAddress(rtInventory, slot); + assert(dst); + memcpy(dst, ptr, size); + CHECK_HEAP } diff --git a/scumm/resource.cpp b/scumm/resource.cpp index 217bf86da6d..80433ba2ca9 100644 --- a/scumm/resource.cpp +++ b/scumm/resource.cpp @@ -1381,6 +1381,8 @@ bool Scumm::isResourceInUse(int type, int i) switch (type) { case rtRoom: return _roomResource == (byte)i; + case rtRoomScripts: + return _roomResource == (byte)i; case rtScript: return isScriptInUse(i); case rtCostume: diff --git a/scumm/script_v8.cpp b/scumm/script_v8.cpp index 362c4a781e8..62344dfe2f1 100644 --- a/scumm/script_v8.cpp +++ b/scumm/script_v8.cpp @@ -1423,10 +1423,10 @@ void Scumm_v8::o6_kernelSetFunctions() case 34: // queryQuit warning("o6_kernelSetFunctions: queryQuit()"); break; - case 108: + case 108: // buildPaletteShadow setupShadowPalette(args[1], args[2], args[3], args[4], args[5], args[6]); break; - case 109: + case 109: // setPaletteShadow setupShadowPalette(0, args[1], args[2], args[3], args[4], args[5]); break; case 115: // getWalkBoxAt