[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