[Scummvm-cvs-logs] SF.net SVN: scummvm:[55872] scummvm/trunk/engines/sci

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Thu Feb 10 17:48:29 CET 2011


Revision: 55872
          http://scummvm.svn.sourceforge.net/scummvm/?rev=55872&view=rev
Author:   thebluegr
Date:     2011-02-10 16:48:29 +0000 (Thu, 10 Feb 2011)

Log Message:
-----------
SCI: Added resource manager support for changing the audio directory dynamically. Also,
moved some audio-specific resource code inside resource_audio.cpp

This functionality is used by kSetLanguage(), called when switching the language in
MUMG Deluxe from the game's main menu.

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/ksound.cpp
    scummvm/trunk/engines/sci/resource.cpp
    scummvm/trunk/engines/sci/resource.h
    scummvm/trunk/engines/sci/resource_audio.cpp

Modified: scummvm/trunk/engines/sci/engine/ksound.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/ksound.cpp	2011-02-10 15:56:35 UTC (rev 55871)
+++ scummvm/trunk/engines/sci/engine/ksound.cpp	2011-02-10 16:48:29 UTC (rev 55872)
@@ -284,10 +284,10 @@
 	// the audio language between English and Spanish.
 	// Basically, it instructs the interpreter to switch the audio resources
 	// (resource.aud and associated map files) and load them from the "Spanish"
-	// subdirectory instead. Therefore, this is only needed for the Spanish 
-	// version, and it needs support at the resource manager level.
-	Common::String languageFolder = s->_segMan->getString(argv[0]);
-	warning("SetLanguage: set audio resource folder to '%s'", languageFolder.c_str());
+	// subdirectory instead.
+	Common::String audioDirectory = s->_segMan->getString(argv[0]);
+	//warning("SetLanguage: set audio resource directory to '%s'", audioDirectory.c_str());
+	g_sci->getResMan()->changeAudioDirectory(audioDirectory);
 
 	return s->r_acc;
 }

Modified: scummvm/trunk/engines/sci/resource.cpp
===================================================================
--- scummvm/trunk/engines/sci/resource.cpp	2011-02-10 15:56:35 UTC (rev 55871)
+++ scummvm/trunk/engines/sci/resource.cpp	2011-02-10 16:48:29 UTC (rev 55872)
@@ -318,7 +318,7 @@
 bool Resource::loadFromPatchFile() {
 	Common::File file;
 	const Common::String &filename = _source->getLocationName();
-	if (file.open(filename) == false) {
+	if (!file.open(filename)) {
 		warning("Failed to open patch file %s", filename.c_str());
 		unalloc();
 		return false;
@@ -739,28 +739,6 @@
 	return 1;
 }
 
-bool ResourceManager::addAudioSources() {
-	Common::List<ResourceId> *resources = listResources(kResourceTypeMap);
-	Common::List<ResourceId>::iterator itr = resources->begin();
-
-	while (itr != resources->end()) {
-		ResourceSource *src = addSource(new IntMapResourceSource("MAP", itr->getNumber()));
-
-		if ((itr->getNumber() == 65535) && Common::File::exists("RESOURCE.SFX"))
-			addSource(new AudioVolumeResourceSource(this, "RESOURCE.SFX", src, 0));
-		else if (Common::File::exists("RESOURCE.AUD"))
-			addSource(new AudioVolumeResourceSource(this, "RESOURCE.AUD", src, 0));
-		else
-			return false;
-
-		++itr;
-	}
-
-	delete resources;
-
-	return true;
-}
-
 void ResourceManager::addScriptChunkSources() {
 #ifdef ENABLE_SCI32
 	if (_mapVersion >= kResVersionSci2) {

Modified: scummvm/trunk/engines/sci/resource.h
===================================================================
--- scummvm/trunk/engines/sci/resource.h	2011-02-10 15:56:35 UTC (rev 55871)
+++ scummvm/trunk/engines/sci/resource.h	2011-02-10 16:48:29 UTC (rev 55872)
@@ -328,6 +328,7 @@
 
 	void setAudioLanguage(int language);
 	int getAudioLanguage() const;
+	void changeAudioDirectory(Common::String path);
 	bool isGMTrackIncluded();
 	bool isVGA() const { return (_viewType == kViewVga) || (_viewType == kViewVga11); }
 	bool isAmiga32color() const { return _viewType == kViewAmiga; }

Modified: scummvm/trunk/engines/sci/resource_audio.cpp
===================================================================
--- scummvm/trunk/engines/sci/resource_audio.cpp	2011-02-10 15:56:35 UTC (rev 55871)
+++ scummvm/trunk/engines/sci/resource_audio.cpp	2011-02-10 16:48:29 UTC (rev 55872)
@@ -893,4 +893,67 @@
 		delete fileStream;
 }
 
+bool ResourceManager::addAudioSources() {
+	Common::List<ResourceId> *resources = listResources(kResourceTypeMap);
+	Common::List<ResourceId>::iterator itr = resources->begin();
+
+	while (itr != resources->end()) {
+		ResourceSource *src = addSource(new IntMapResourceSource("MAP", itr->getNumber()));
+
+		if ((itr->getNumber() == 65535) && Common::File::exists("RESOURCE.SFX"))
+			addSource(new AudioVolumeResourceSource(this, "RESOURCE.SFX", src, 0));
+		else if (Common::File::exists("RESOURCE.AUD"))
+			addSource(new AudioVolumeResourceSource(this, "RESOURCE.AUD", src, 0));
+		else
+			return false;
+
+		++itr;
+	}
+
+	delete resources;
+
+	return true;
+}
+
+void ResourceManager::changeAudioDirectory(Common::String path) {
+	// Remove all of the audio map resource sources, as well as the audio resource sources
+	for (Common::List<ResourceSource *>::iterator it = _sources.begin(); it != _sources.end(); ++it) {
+		ResourceSource *source = *it;
+		ResSourceType sourceType = source->getSourceType();
+
+		// Remove the resource source, if it's an audio map or an audio file
+		if (sourceType == kSourceIntMap || sourceType == kSourceAudioVolume) {
+			// Don't remove 65535.map (the SFX map) or resource.sfx
+			if (source->_volumeNumber == 65535 || source->getLocationName() == "RESOURCE.SFX")
+				continue;
+
+			it = _sources.erase(it);
+			delete source;
+		}
+	}
+
+	// Now, readd the audio resource sources
+	Common::String mapName = "MAP";
+	Common::String audioResourceName = "RESOURCE.AUD";
+	if (!path.empty()) {
+		mapName = Common::String::format("%s/MAP", path.c_str());
+		audioResourceName = Common::String::format("%s/RESOURCE.AUD", path.c_str());
+	}
+
+	Common::List<ResourceId> *resources = listResources(kResourceTypeMap);
+	for (Common::List<ResourceId>::iterator it = resources->begin(); it != resources->end(); ++it) {
+		// Don't readd 65535.map or resource.sfx
+		if ((it->getNumber() == 65535))
+			continue;
+
+		ResourceSource *src = addSource(new IntMapResourceSource(mapName, it->getNumber()));
+		addSource(new AudioVolumeResourceSource(this, audioResourceName, src, 0));
+	}
+
+	delete resources;
+
+	// Rescan the newly added resources
+	scanNewSources();
+}
+
 } // End of namespace Sci


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