SCI: slight cleanup on processPatch, etc.

svn-id: r49495
This commit is contained in:
Martin Kiewitz 2010-06-07 21:55:57 +00:00
parent ae599e63c2
commit ea2e2053f2
2 changed files with 29 additions and 29 deletions

View file

@ -1066,19 +1066,19 @@ ResourceManager::ResVersion ResourceManager::detectVolVersion() {
}
// version-agnostic patch application
void ResourceManager::processPatch(ResourceSource *source, ResourceType restype, uint16 resnumber, uint32 tuple) {
void ResourceManager::processPatch(ResourceSource *source, ResourceType resourceType, uint16 resourceNr, uint32 tuple) {
Common::SeekableReadStream *fileStream = 0;
Resource *newrsc;
ResourceId resId = ResourceId(restype, resnumber, tuple);
byte patchtype, patch_data_offset;
ResourceId resId = ResourceId(resourceType, resourceNr, tuple);
byte patchType, patchDataOffset;
int fsize;
// base36 encoded patches (i.e. audio36 and sync36) have the same type as their non-base36 encoded counterparts
if (restype == kResourceTypeAudio36)
restype = kResourceTypeAudio;
if (resourceType == kResourceTypeAudio36)
resourceType = kResourceTypeAudio;
if (restype == kResourceTypeSync36)
restype = kResourceTypeSync;
if (resourceType == kResourceTypeSync36)
resourceType = kResourceTypeSync;
if (source->resourceFile) {
fileStream = source->resourceFile->createReadStream();
@ -1096,36 +1096,36 @@ void ResourceManager::processPatch(ResourceSource *source, ResourceType restype,
return;
}
patchtype = fileStream->readByte() & 0x7F;
patch_data_offset = fileStream->readByte();
patchType = fileStream->readByte() & 0x7F;
patchDataOffset = fileStream->readByte();
delete fileStream;
if (patchtype != restype) {
if (patchType != resourceType) {
debug("Patching %s failed - resource type mismatch", source->location_name.c_str());
}
// Fixes SQ5/German, patch file special case logic taken from SCI View disassembly
if (patch_data_offset & 0x80) {
switch (patch_data_offset & 0x7F) {
if (patchDataOffset & 0x80) {
switch (patchDataOffset & 0x7F) {
case 0:
patch_data_offset = 24;
patchDataOffset = 24;
break;
case 1:
patch_data_offset = 2;
patchDataOffset = 2;
break;
case 4:
patch_data_offset = 8;
patchDataOffset = 8;
break;
default:
warning("Resource patch unsupported special case %X", patch_data_offset & 0x7F);
warning("Resource patch unsupported special case %X", patchDataOffset & 0x7F);
return;
}
}
if (patch_data_offset + 2 >= fsize) {
if (patchDataOffset + 2 >= fsize) {
debug("Patching %s failed - patch starting at offset %d can't be in file of size %d",
source->location_name.c_str(), patch_data_offset + 2, fsize);
source->location_name.c_str(), patchDataOffset + 2, fsize);
return;
}
// Prepare destination, if neccessary
@ -1138,8 +1138,8 @@ void ResourceManager::processPatch(ResourceSource *source, ResourceType restype,
newrsc->_id = resId;
newrsc->_status = kResStatusNoMalloc;
newrsc->_source = source;
newrsc->size = fsize - patch_data_offset - 2;
newrsc->_headerSize = patch_data_offset;
newrsc->size = fsize - patchDataOffset - 2;
newrsc->_headerSize = patchDataOffset;
newrsc->_fileOffset = 0;
debugC(1, kDebugLevelResMan, "Patching %s - OK", source->location_name.c_str());
}
@ -1185,13 +1185,13 @@ void ResourceManager::readResourcePatchesBase36(ResourceSource *source) {
inputName.deleteChar(7); // delete the dot
// The base36 encoded resource contains the following:
// uint16 number, byte noun, byte verb, byte cond, byte seq
uint16 number = strtol(Common::String(inputName.c_str(), 3).c_str(), 0, 36); // 3 characters
// uint16 resourceId, byte noun, byte verb, byte cond, byte seq
uint16 resourceNr = strtol(Common::String(inputName.c_str(), 3).c_str(), 0, 36); // 3 characters
byte noun = strtol(Common::String(inputName.c_str() + 3, 2).c_str(), 0, 36); // 2 characters
byte verb = strtol(Common::String(inputName.c_str() + 5, 2).c_str(), 0, 36); // 2 characters
byte cond = strtol(Common::String(inputName.c_str() + 7, 2).c_str(), 0, 36); // 2 characters
byte seq = strtol(Common::String(inputName.c_str() + 9, 1).c_str(), 0, 36); // 1 character
ResourceId resource36((ResourceType)i, number, noun, verb, cond, seq);
ResourceId resource36((ResourceType)i, resourceNr, noun, verb, cond, seq);
/*
if (i == kResourceTypeAudio36)
@ -1204,7 +1204,7 @@ void ResourceManager::readResourcePatchesBase36(ResourceSource *source) {
psrcPatch->source_type = kSourcePatch;
psrcPatch->location_name = name;
psrcPatch->resourceFile = 0;
processPatch(psrcPatch, (ResourceType)i, number, resource36.tuple);
processPatch(psrcPatch, (ResourceType)i, resourceNr, resource36.tuple);
}
}
}
@ -1218,7 +1218,7 @@ void ResourceManager::readResourcePatches(ResourceSource *source) {
Common::String mask, name;
Common::ArchiveMemberList files;
int number = -1;
uint16 resourceNr = 0;
const char *szResType;
ResourceSource *psrcPatch;
@ -1239,14 +1239,14 @@ void ResourceManager::readResourcePatches(ResourceSource *source) {
name = (*x)->getName();
// SCI1 scheme
if (isdigit(name[0])) {
number = atoi(name.c_str());
resourceNr = atoi(name.c_str());
bAdd = true;
} else {
// SCI0 scheme
int resname_len = strlen(szResType);
if (scumm_strnicmp(name.c_str(), szResType, resname_len) == 0
&& !isalpha(name[resname_len + 1])) {
number = atoi(name.c_str() + resname_len + 1);
resourceNr = atoi(name.c_str() + resname_len + 1);
bAdd = true;
}
}
@ -1256,7 +1256,7 @@ void ResourceManager::readResourcePatches(ResourceSource *source) {
psrcPatch->source_type = kSourcePatch;
psrcPatch->location_name = name;
psrcPatch->resourceFile = 0;
processPatch(psrcPatch, (ResourceType)i, number);
processPatch(psrcPatch, (ResourceType)i, resourceNr);
}
}
}