[Scummvm-cvs-logs] SF.net SVN: scummvm:[39409] scummvm/trunk/engines/parallaction

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Sun Mar 15 07:07:57 CET 2009


Revision: 39409
          http://scummvm.svn.sourceforge.net/scummvm/?rev=39409&view=rev
Author:   Kirben
Date:     2009-03-15 06:07:57 +0000 (Sun, 15 Mar 2009)

Log Message:
-----------
Enable music in Amiga version of BRA too.

Modified Paths:
--------------
    scummvm/trunk/engines/parallaction/disk_br.cpp
    scummvm/trunk/engines/parallaction/parallaction_br.cpp
    scummvm/trunk/engines/parallaction/sound.h
    scummvm/trunk/engines/parallaction/sound_br.cpp

Modified: scummvm/trunk/engines/parallaction/disk_br.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/disk_br.cpp	2009-03-15 04:34:00 UTC (rev 39408)
+++ scummvm/trunk/engines/parallaction/disk_br.cpp	2009-03-15 06:07:57 UTC (rev 39409)
@@ -480,23 +480,18 @@
 		delete stream;
 	}
 #if 0
-	if (mask && _mskDir.exists()) {
-		filepath = Common::String(mask) + ".msk";
-		node = _mskDir.getChild(filepath);
-		if (!node.exists()) {
-			filepath = Common::String(mask) + ".msk";
-			node = _commonMskDir.getChild(filepath);
-		}
-
-		if (node.exists()) {
-			stream.open(node);
-			stream.seek(0x30, SEEK_SET);
-			Graphics::PackBitsReadStream unpackedStream(stream);
-			info.mask.create(info.width, info.height);
-			unpackedStream.read(info.mask.data, info.mask.size);
+	if (mask) {
+		stream = tryOpenFile("msk/" + Common::String(path), ".msk");
+		if (stream) {
+			Graphics::PackBitsReadStream unpackedStream(*stream);
+			info._mask = new MaskBuffer;
+			info._mask->create(info.width, info.height);
+			unpackedStream.read(info._mask->data, info._mask->size);
 			// TODO: there is another step to do after decompression...
-			loadMask(info, stream);
-			stream.close();
+			loadMask(mask, *info._mask);
+			delete stream;
+		} else {
+			debugC(1, kDebugDisk, "AmigaDisk_br::loadScenery: (%s) not found", mask);
 		}
 	}
 #endif
@@ -603,7 +598,7 @@
 
 Common::SeekableReadStream* AmigaDisk_br::loadMusic(const char* name) {
 	debugC(5, kDebugDisk, "AmigaDisk_br::loadMusic");
-	return openFile("msc/" + Common::String(name), ".msc");
+	return tryOpenFile("msc/" + Common::String(name), ".msc");
 }
 
 

Modified: scummvm/trunk/engines/parallaction/parallaction_br.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction_br.cpp	2009-03-15 04:34:00 UTC (rev 39408)
+++ scummvm/trunk/engines/parallaction/parallaction_br.cpp	2009-03-15 06:07:57 UTC (rev 39409)
@@ -66,6 +66,7 @@
 	} else {
 		_disk = new AmigaDisk_br(this);
 		_disk->setLanguage(2);					// NOTE: language is now hardcoded to English. Original used command-line parameters.
+		_soundManI = new AmigaSoundMan_br(this);
 	}
 
 	_disk->init();

Modified: scummvm/trunk/engines/parallaction/sound.h
===================================================================
--- scummvm/trunk/engines/parallaction/sound.h	2009-03-15 04:34:00 UTC (rev 39408)
+++ scummvm/trunk/engines/parallaction/sound.h	2009-03-15 06:07:57 UTC (rev 39409)
@@ -182,6 +182,8 @@
 
 class SoundMan_br : public SoundManImpl {
 protected:
+	Audio::Mixer	*_mixer;
+
 	Common::String _musicFile;
 
 	virtual void playMusic() = 0;
@@ -206,6 +208,20 @@
 	void pause(bool p);
 };
 
+class AmigaSoundMan_br : public SoundMan_br {
+
+	Audio::AudioStream *_musicStream;
+	Audio::SoundHandle	_musicHandle;
+
+public:
+	AmigaSoundMan_br(Parallaction_br *vm);
+	~AmigaSoundMan_br();
+
+	void playMusic();
+	void stopMusic();
+	void pause(bool p);
+};
+
 } // namespace Parallaction
 
 #endif

Modified: scummvm/trunk/engines/parallaction/sound_br.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/sound_br.cpp	2009-03-15 04:34:00 UTC (rev 39408)
+++ scummvm/trunk/engines/parallaction/sound_br.cpp	2009-03-15 06:07:57 UTC (rev 39409)
@@ -26,8 +26,11 @@
 #include "sound/mixer.h"
 #include "common/stream.h"
 #include "common/util.h"
+
+#include "sound/mixer.h"
 #include "sound/mididrv.h"
 #include "sound/midiparser.h"
+#include "sound/mods/protracker.h"
 
 #include "parallaction/disk.h"
 #include "parallaction/parallaction.h"
@@ -416,6 +419,44 @@
 	_midiPlayer->pause(p);
 }
 
+AmigaSoundMan_br::AmigaSoundMan_br(Parallaction_br *vm) {
+	_musicStream = 0;
+}
+
+AmigaSoundMan_br::~AmigaSoundMan_br() {
+}
+
+void AmigaSoundMan_br::playMusic() {
+	stopMusic();
+
+	debugC(1, kDebugAudio, "AmigaSoundMan_ns::playMusic()");
+
+	Common::SeekableReadStream *stream = _vm->_disk->loadMusic(_musicFile.c_str());
+	if (!stream)
+		return;
+
+	_musicStream = Audio::makeProtrackerStream(stream);
+	delete stream;
+
+	debugC(3, kDebugAudio, "AmigaSoundMan_ns::playMusic(): created new music stream");
+
+	_mixer->playInputStream(Audio::Mixer::kMusicSoundType, &_musicHandle, _musicStream, -1, 255, 0, false, false);
+}
+
+void AmigaSoundMan_br::stopMusic() {
+	debugC(1, kDebugAudio, "AmigaSoundMan_ns::stopMusic()");
+
+	if (_mixer->isSoundHandleActive(_musicHandle)) {
+		_mixer->stopHandle(_musicHandle);
+		delete _musicStream;
+		_musicStream = 0;
+	}
+}
+
+void AmigaSoundMan_br::pause(bool p) {
+	_mixer->pauseHandle(_musicHandle, p);
+}
+
 void SoundMan_br::setMusicFile(const char *name) {
 	_musicFile = name;
 }


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