aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjörn Andersson2006-01-01 16:29:23 +0000
committerTorbjörn Andersson2006-01-01 16:29:23 +0000
commit5c75f5a6e57d922893bb473fc86123abec970917 (patch)
treebd5731c0fd06da4a87b8cad74136003b2034d493
parent77ca6708ee308243c923b7a5227c56a34bee4261 (diff)
downloadscummvm-rg350-5c75f5a6e57d922893bb473fc86123abec970917.tar.gz
scummvm-rg350-5c75f5a6e57d922893bb473fc86123abec970917.tar.bz2
scummvm-rg350-5c75f5a6e57d922893bb473fc86123abec970917.zip
Some cleanup/paranoia fixes to the previous missing voices/music fix. Treat
files marked as being on both CDs (I haven't seen any such file -- ever), treat it as if it's on the hard disk. Also, the "cd" field of the ResourceFile struct now holds 0, 1 or 2, not the bit flags from the data file. (This last change is not in the 0.8 branch.) svn-id: r19884
-rw-r--r--sword2/console.cpp21
-rw-r--r--sword2/resman.cpp22
-rw-r--r--sword2/resman.h14
3 files changed, 21 insertions, 36 deletions
diff --git a/sword2/console.cpp b/sword2/console.cpp
index a8062fb4aa..bedf8d709f 100644
--- a/sword2/console.cpp
+++ b/sword2/console.cpp
@@ -284,24 +284,9 @@ bool Debugger::Cmd_Res(int argc, const char **argv) {
ResourceFile *resFiles = _vm->_resman->getResFiles();
for (uint i = 0; i < numClusters; i++) {
- DebugPrintf("%-20s ", resFiles[i].fileName);
- if (!(resFiles[i].cd & LOCAL_PERM)) {
- switch (resFiles[i].cd & 3) {
- case BOTH:
- DebugPrintf("CD 1 & 2\n");
- break;
- case CD1:
- DebugPrintf("CD 1\n");
- break;
- case CD2:
- DebugPrintf("CD 2\n");
- break;
- default:
- DebugPrintf("CD 3? Huh?!\n");
- break;
- }
- } else
- DebugPrintf("HD\n");
+ const char *locStr[3] = { "HDD", "CD1", "CD2" };
+
+ DebugPrintf("%-20s %d\n", resFiles[i].fileName, locStr[resFiles[i].cd]);
}
DebugPrintf("%d resources\n", _vm->_resman->getNumResFiles());
diff --git a/sword2/resman.cpp b/sword2/resman.cpp
index cf454b3fec..f57029f4ab 100644
--- a/sword2/resman.cpp
+++ b/sword2/resman.cpp
@@ -43,6 +43,14 @@ namespace Sword2 {
// resource.tab which is a table which tells us which cluster a resource
// is located in and the number within the cluster
+enum {
+ BOTH = 0x0, // Cluster is on both CDs
+ CD1 = 0x1, // Cluster is on CD1 only
+ CD2 = 0x2, // Cluster is on CD2 only
+ LOCAL_CACHE = 0x4, // Cluster is cached on HDD
+ LOCAL_PERM = 0x8 // Cluster is on HDD.
+};
+
struct CdInf {
uint8 clusterName[20]; // Null terminated cluster name.
uint8 cd; // Cd cluster is on and whether it is on the local drive or not.
@@ -53,7 +61,7 @@ ResourceManager::ResourceManager(Sword2Engine *vm) {
// Until proven differently, assume we're on CD 1. This is so the start
// dialog will be able to play any music at all.
- setCD(CD1);
+ setCD(1);
// We read in the resource info which tells us the names of the
// resource cluster files ultimately, although there might be groups
@@ -158,11 +166,13 @@ ResourceManager::ResourceManager(Sword2Engine *vm) {
// all here.
if (cdInf[i].cd & LOCAL_PERM)
- cdInf[i].cd = LOCAL_PERM;
+ cdInf[i].cd = 0;
+ else if (cdInf[i].cd & CD1)
+ cdInf[i].cd = 1;
else if (cdInf[i].cd & CD2)
- cdInf[i].cd = CD2;
+ cdInf[i].cd = 2;
else
- cdInf[i].cd = CD1;
+ cdInf[i].cd = 0;
}
file.close();
@@ -402,10 +412,10 @@ Common::File *ResourceManager::openCluFile(uint16 fileNum) {
// playing a demo, then we're in trouble if the file
// can't be found!
- if ((_vm->_features & GF_DEMO) || (_resFiles[fileNum].cd & LOCAL_PERM))
+ if ((_vm->_features & GF_DEMO) || _resFiles[fileNum].cd == 0)
error("Could not find '%s'", _resFiles[fileNum].fileName);
- askForCD(_resFiles[fileNum].cd & 3);
+ askForCD(_resFiles[fileNum].cd);
}
return file;
}
diff --git a/sword2/resman.h b/sword2/resman.h
index 42ebda120d..94ffe5addf 100644
--- a/sword2/resman.h
+++ b/sword2/resman.h
@@ -32,14 +32,6 @@ namespace Sword2 {
class Sword2Engine;
-enum {
- BOTH = 0x0, // Cluster is on both CDs
- CD1 = 0x1, // Cluster is on CD1 only
- CD2 = 0x2, // Cluster is on CD2 only
- LOCAL_CACHE = 0x4, // Cluster is cached on HDD
- LOCAL_PERM = 0x8 // Cluster is on HDD.
-};
-
struct Resource {
byte *ptr;
uint32 size;
@@ -119,10 +111,8 @@ public:
void askForCD(int cd);
void setCD(int cd) {
- if (cd == CD1)
- _curCD = 1;
- else if (cd == CD2)
- _curCD = 2;
+ if (cd)
+ _curCD = cd;
}
int getCD() {