aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/scicore/resource_patch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/scicore/resource_patch.cpp')
-rw-r--r--engines/sci/scicore/resource_patch.cpp22
1 files changed, 10 insertions, 12 deletions
diff --git a/engines/sci/scicore/resource_patch.cpp b/engines/sci/scicore/resource_patch.cpp
index 2cbeb2b52c..695f33fb01 100644
--- a/engines/sci/scicore/resource_patch.cpp
+++ b/engines/sci/scicore/resource_patch.cpp
@@ -51,14 +51,15 @@ void ResourceManager::process_patch(ResourceSource *source,
if (!file.open(member.createReadStream(), member.getName()))
perror("""__FILE__"": (""__LINE__""): failed to open");
else {
- uint8 filehdr[2];
- Resource *newrsc = findResourceUnsorted(_resources, _resourcesNr, restype, resnumber);
+ byte filehdr[2];
int fsize = file.size();
if (fsize < 3) {
printf("File too small\n");
return;
}
-
+
+ uint32 resId = RESOURCE_HASH(restype, resnumber);
+ Resource *newrsc;
int patch_data_offset;
file.read(filehdr, 2);
@@ -74,23 +75,20 @@ void ResourceManager::process_patch(ResourceSource *source,
fsize -= patch_data_offset;
// Prepare destination, if neccessary
- if (!newrsc) {
- // Completely new resource!
- _resourcesNr++;
- _resources = (Resource *)sci_realloc(_resources, _resourcesNr * sizeof(Resource));
- newrsc = (_resources - 1) + _resourcesNr;
- newrsc->alt_sources = NULL;
- }
+ if (_resMap.contains(resId) == false) {
+ newrsc = new Resource;
+ _resMap.setVal(resId, newrsc);
+ } else
+ newrsc = _resMap.getVal(resId);
// Overwrite everything, because we're patching
newrsc->size = fsize - 2;
- newrsc->id = restype << 11 | resnumber;
+ newrsc->id = resId;
newrsc->number = resnumber;
newrsc->status = SCI_STATUS_NOMALLOC;
newrsc->type = restype;
newrsc->source = source;
newrsc->file_offset = 2 + patch_data_offset;
- addAltSource(newrsc, source, 2);
printf("OK\n");
}
}