[Scummvm-cvs-logs] SF.net SVN: scummvm: [25785] scummvm/trunk/engines/queen

cyx at users.sourceforge.net cyx at users.sourceforge.net
Thu Feb 22 13:12:46 CET 2007


Revision: 25785
          http://scummvm.svn.sourceforge.net/scummvm/?rev=25785&view=rev
Author:   cyx
Date:     2007-02-22 04:12:45 -0800 (Thu, 22 Feb 2007)

Log Message:
-----------
some fixes with resource files handling for Amiga versions

Modified Paths:
--------------
    scummvm/trunk/engines/queen/bankman.cpp
    scummvm/trunk/engines/queen/cutaway.cpp
    scummvm/trunk/engines/queen/queen.cpp
    scummvm/trunk/engines/queen/resource.cpp
    scummvm/trunk/engines/queen/resource.h
    scummvm/trunk/engines/queen/sound.cpp
    scummvm/trunk/engines/queen/sound.h

Modified: scummvm/trunk/engines/queen/bankman.cpp
===================================================================
--- scummvm/trunk/engines/queen/bankman.cpp	2007-02-22 10:51:47 UTC (rev 25784)
+++ scummvm/trunk/engines/queen/bankman.cpp	2007-02-22 12:12:45 UTC (rev 25785)
@@ -52,6 +52,12 @@
 	}
 
 	close(bankslot);
+
+	if (_res->getPlatform() == Common::kPlatformAmiga && !_res->fileExists(bankname)) {
+		debug(9, "BankManager::load() bank '%s' doesn't exist", bankname);
+		return;
+	}
+
 	bank->data = _res->loadFile(bankname);
 
 	if (_res->getPlatform() == Common::kPlatformAmiga) {

Modified: scummvm/trunk/engines/queen/cutaway.cpp
===================================================================
--- scummvm/trunk/engines/queen/cutaway.cpp	2007-02-22 10:51:47 UTC (rev 25784)
+++ scummvm/trunk/engines/queen/cutaway.cpp	2007-02-22 12:12:45 UTC (rev 25785)
@@ -41,9 +41,11 @@
 		const char *filename,
 		char *nextFilename,
 		QueenEngine *vm) {
-	Cutaway *cutaway = new Cutaway(filename, vm);
-	cutaway->run(nextFilename);
-	delete cutaway;
+	if (vm->resource()->fileExists(filename)) {
+		Cutaway *cutaway = new Cutaway(filename, vm);
+		cutaway->run(nextFilename);
+		delete cutaway;
+	}
 }
 
 Cutaway::Cutaway(

Modified: scummvm/trunk/engines/queen/queen.cpp
===================================================================
--- scummvm/trunk/engines/queen/queen.cpp	2007-02-22 10:51:47 UTC (rev 25784)
+++ scummvm/trunk/engines/queen/queen.cpp	2007-02-22 12:12:45 UTC (rev 25785)
@@ -211,6 +211,7 @@
 			_display->blankScreen();
 		}
 	}
+	_sound->updateMusic();
 }
 
 bool QueenEngine::canLoadOrSave() const {

Modified: scummvm/trunk/engines/queen/resource.cpp
===================================================================
--- scummvm/trunk/engines/queen/resource.cpp	2007-02-22 10:51:47 UTC (rev 25784)
+++ scummvm/trunk/engines/queen/resource.cpp	2007-02-22 12:12:45 UTC (rev 25785)
@@ -62,6 +62,7 @@
 	: _resourceEntries(0), _resourceTable(NULL) {
 	memset(&_version, 0, sizeof(_version));
 
+	_currentResourceFileNum = 1;
 	if (!_resourceFile.open("queen.1c")) {
 		if (!_resourceFile.open("queen.1")) {
 			error("Could not open resource file 'queen.1[c]'");
@@ -110,33 +111,17 @@
 	return re;
 }
 
-static uint8 emptyBank[] = { 0, 0 };
-
 uint8 *Resource::loadFile(const char *filename, uint32 skipBytes, uint32 *size) {
 	debug(7, "Resource::loadFile('%s')", filename);
 	ResourceEntry *re = resourceEntry(filename);
-	if (_version.platform == Common::kPlatformAmiga && re == NULL) {
-		return emptyBank;
-	}
 	assert(re != NULL);
 	uint32 sz = re->size - skipBytes;
 	if (size != NULL) {
 		*size = sz;
 	}
 	byte *dstBuf = new byte[sz];
-	if (re->bundle == 1) {
-		_resourceFile.seek(re->offset + skipBytes);
-		_resourceFile.read(dstBuf, sz);
-	} else {
-		Common::File resourceFile;
-		char name[20];
-		sprintf(name, "queen.%d", re->bundle);
-		if (!resourceFile.open(name)) {
-			error("Could not open resource file '%s'", name);
-		}
-		resourceFile.seek(re->offset + skipBytes);
-		resourceFile.read(dstBuf, sz);
-	}
+	seekResourceFile(re->bundle, re->offset + skipBytes);
+	_resourceFile.read(dstBuf, sz);
 	return dstBuf;
 }
 
@@ -234,7 +219,7 @@
 		return;
 	}
 	ResourceEntry *re = resourceEntry("QUEEN.JAS");
-	assert(re != NULL && re->bundle == 1);
+	assert(re != NULL);
 	uint32 offset = re->offset;
 	if (isDemo())
 		offset += JAS_VERSION_OFFSET_DEMO;
@@ -242,7 +227,7 @@
 		offset += JAS_VERSION_OFFSET_INTV;
 	else
 		offset += JAS_VERSION_OFFSET_PC;
-	_resourceFile.seek(offset);
+	seekResourceFile(re->bundle, offset);
 
 	char versionStr[6];
 	_resourceFile.read(versionStr, 6);
@@ -250,6 +235,20 @@
 		error("Verifying game version failed! (expected: '%s', found: '%s')", _version.str, versionStr);
 }
 
+void Resource::seekResourceFile(int num, uint32 offset) {
+	if (_currentResourceFileNum != num) {
+		debug(7, "Opening resource file %d, current %d", num, _currentResourceFileNum);
+		_resourceFile.close();
+		char name[20];
+		sprintf(name, "queen.%d", num);
+		if (!_resourceFile.open(name)) {
+			error("Could not open resource file '%s'", name);
+		}
+		_currentResourceFileNum = num;
+	}
+	_resourceFile.seek(offset);
+}
+
 void Resource::readTableFile(uint32 offset) {
 	Common::File tableFile;
 	tableFile.open(_tableFilename);
@@ -295,9 +294,9 @@
 Common::File *Resource::findSound(const char *filename, uint32 *size) {
 	assert(strstr(filename, ".SB") != NULL || strstr(filename, ".AMR") != NULL);
 	ResourceEntry *re = resourceEntry(filename);
-	if (re && re->bundle == 1) {
+	if (re) {
 		*size = re->size;
-		_resourceFile.seek(re->offset);
+		seekResourceFile(re->bundle, re->offset);
 		return &_resourceFile;
 	}
 	return NULL;

Modified: scummvm/trunk/engines/queen/resource.h
===================================================================
--- scummvm/trunk/engines/queen/resource.h	2007-02-22 10:51:47 UTC (rev 25784)
+++ scummvm/trunk/engines/queen/resource.h	2007-02-22 12:12:45 UTC (rev 25785)
@@ -128,6 +128,8 @@
 
 	Common::File _resourceFile;
 
+	int _currentResourceFileNum;
+
 	DetectedGameVersion _version;
 
 	//! number of entries in resource table
@@ -141,6 +143,9 @@
 	//! returns a reference to the ReseourceEntry for the specified filename
 	ResourceEntry *resourceEntry(const char *filename) const;
 
+	//! seeks resource file to specific bundle and file offset
+	void seekResourceFile(int num, uint32 offset);
+
 	//! extarct the resource table for the specified game version
 	void readTableFile(uint32 offset);
 

Modified: scummvm/trunk/engines/queen/sound.cpp
===================================================================
--- scummvm/trunk/engines/queen/sound.cpp	2007-02-22 10:51:47 UTC (rev 25784)
+++ scummvm/trunk/engines/queen/sound.cpp	2007-02-22 12:12:45 UTC (rev 25785)
@@ -547,6 +547,7 @@
 }
 
 void AmigaSound::playSound(const char *base) {
+	debug(7, "AmigaSound::playSound(%s)", base);
 	char soundName[20];
 	sprintf(soundName, "%s.AMR", base);
 
@@ -563,6 +564,7 @@
 }
 
 void AmigaSound::playModule(const char *base, int song) {
+	debug(7, "AmigaSound::playModule(%s, %d)", base, song);
 	char name[20];
 
 	// load song/pattern data

Modified: scummvm/trunk/engines/queen/sound.h
===================================================================
--- scummvm/trunk/engines/queen/sound.h	2007-02-22 10:51:47 UTC (rev 25784)
+++ scummvm/trunk/engines/queen/sound.h	2007-02-22 12:12:45 UTC (rev 25785)
@@ -74,6 +74,8 @@
 	virtual bool isSpeechActive() const	{ return false; }
 	virtual bool isSfxActive() const { return false; }
 
+	virtual void updateMusic() {}
+
 	virtual void setVolume(int vol)		{ _masterVolume = vol; }
 	virtual int volume()				{ return _masterVolume; }
 
@@ -168,10 +170,10 @@
 	void stopSfx();
 	void stopSong();
 
+	bool isSfxActive() const { return _mixer->isSoundHandleActive(_sfxHandle); }
+
 	void updateMusic();
 
-	bool isSfxActive() const { return false; }
-
 protected:
 
 	void playSound(const char *base);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list