summaryrefslogtreecommitdiff
path: root/src/sound.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-08-09 19:50:44 +0000
committerrubidium <rubidium@openttd.org>2009-08-09 19:50:44 +0000
commit9ee2a66c8620d2f47c0d7792847c90146dfc4f8e (patch)
treedae5e6c7eac84bc443fc16ebb012bb7697923649 /src/sound.cpp
parent35d5a197d6f93e05eb358ed0a30db9ab2645911b (diff)
downloadopenttd-9ee2a66c8620d2f47c0d7792847c90146dfc4f8e.tar.xz
(svn r17139) -Change: add the concept of sound sets
Diffstat (limited to 'src/sound.cpp')
-rw-r--r--src/sound.cpp41
1 files changed, 38 insertions, 3 deletions
diff --git a/src/sound.cpp b/src/sound.cpp
index 0e4b705fb..99799002d 100644
--- a/src/sound.cpp
+++ b/src/sound.cpp
@@ -13,6 +13,10 @@
#include "vehicle_base.h"
#include "debug.h"
+/* The type of set we're replacing */
+#define SET_TYPE "sounds"
+#include "base_media_func.h"
+
static SoundEntry _original_sounds[ORIGINAL_SAMPLE_COUNT];
MusicFileSettings msf;
@@ -116,10 +120,10 @@ static bool SetBankSource(MixerChannel *mc, const SoundEntry *sound)
return true;
}
-bool SoundInitialize(const char *filename)
+void InitializeSound()
{
- OpenBankFile(filename);
- return true;
+ DEBUG(misc, 1, "Loading sound effects...");
+ OpenBankFile(BaseSounds::GetUsedSet()->files->filename);
}
/* Low level sound player */
@@ -242,3 +246,34 @@ void SndPlayFx(SoundID sound)
{
StartSound(sound, 0, msf.effect_vol);
}
+
+INSTANTIATE_BASE_MEDIA_METHODS(BaseMedia<SoundsSet>, SoundsSet)
+
+/** Names corresponding to the sound set's files */
+template <class T, size_t Tnum_files>
+/* static */ const char *BaseSet<T, Tnum_files>::file_names[Tnum_files] = { "samples" };
+
+template <class Tbase_set>
+/* static */ const char *BaseMedia<Tbase_set>::GetExtension()
+{
+ return ".obs"; // OpenTTD Base Sounds
+}
+
+template <class Tbase_set>
+/* static */ bool BaseMedia<Tbase_set>::DetermineBestSet()
+{
+ if (BaseMedia<Tbase_set>::used_set != NULL) return true;
+
+ const Tbase_set *best = BaseMedia<Tbase_set>::available_sets;
+ for (const Tbase_set *c = BaseMedia<Tbase_set>::available_sets; c != NULL; c = c->next) {
+ if (best->found_files < c->found_files ||
+ (best->found_files == c->found_files &&
+ (best->shortname == c->shortname && best->version < c->version))) {
+ best = c;
+ }
+ }
+
+ BaseMedia<Tbase_set>::used_set = best;
+ return BaseMedia<Tbase_set>::used_set != NULL;
+}
+