[Scummvm-git-logs] scummvm master -> 575daf32e28de21db3ac2ed5a80463a8adacd47f

dreammaster dreammaster at scummvm.org
Tue Sep 13 03:38:00 CEST 2016


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
575daf32e2 XEEN: Extra Adlib initialization during Music creation


Commit: 575daf32e28de21db3ac2ed5a80463a8adacd47f
    https://github.com/scummvm/scummvm/commit/575daf32e28de21db3ac2ed5a80463a8adacd47f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-09-12T21:37:52-04:00

Commit Message:
XEEN: Extra Adlib initialization during Music creation

Changed paths:
    engines/xeen/music.cpp
    engines/xeen/music.h



diff --git a/engines/xeen/music.cpp b/engines/xeen/music.cpp
index 741fe81..7996093 100644
--- a/engines/xeen/music.cpp
+++ b/engines/xeen/music.cpp
@@ -27,19 +27,21 @@
 
 namespace Xeen {
 
-#define CALLBACKS_PER_SECOND 60
+#define CALLBACKS_PER_SECOND 72
 
 Music::Music(Audio::Mixer *mixer) : _mixer(mixer), _effectsData(nullptr),
 		_musicPtr1(nullptr), _musicPtr2(nullptr), _lowMusicIgnored(false),
 		_fieldF(false), _field109(0), _field10B(0), _field114(0), 
 		_field115(0), _field117(0) {
 	_channels.resize(ADLIB_CHANNEL_COUNT);
+	Common::fill(&_fieldFB[0], &_fieldFB[7], 0);
 	Common::fill(&_field10D[0], &_field10D[7], 0);
-	
+
 	_mixer = mixer;
 	_opl = OPL::Config::create();
 	_opl->init();
 	_opl->start(new Common::Functor0Mem<void, Music>(this, &Music::onTimer), CALLBACKS_PER_SECOND);
+	initialize();
 
 	loadEffectsData();
 }
@@ -50,6 +52,15 @@ Music::~Music() {
 	delete[] _effectsData;
 }
 
+void Music::initialize() {
+	write(1, 0x20);
+	write(8, 0);
+	write(0xBD, 0);
+
+	resetFrequencies();
+	reset();
+}
+
 void Music::loadEffectsData() {
 	File file("admus");
 	Common::String md5str = Common::computeStreamMD5AsString(file, 8192);
@@ -121,6 +132,13 @@ void Music::reset() {
 	setOutputLevel(8, 63);
 }
 
+void Music::resetFrequencies() {
+	for (int opNum = 6; opNum >= 0; --opNum) {
+		_fieldFB[opNum] = 0;
+		setFrequency(opNum, 0);
+	}
+}
+
 void Music::setFrequency(byte operatorNum, uint frequency) {
 	write(0xA0 + operatorNum, frequency & 0xff);
 	write(0xB0 + operatorNum, (frequency >> 8));
diff --git a/engines/xeen/music.h b/engines/xeen/music.h
index 40059be..c2202eb 100644
--- a/engines/xeen/music.h
+++ b/engines/xeen/music.h
@@ -65,6 +65,7 @@ private:
 	Common::Array<uint16> _effectsOffsets;
 	const byte *_musicPtr1, *_musicPtr2;
 	bool _fieldF;
+	uint _fieldFB[7];
 	int _field109;
 	int _field10B;
 	byte _field10D[7];
@@ -74,6 +75,11 @@ private:
 	bool _lowMusicIgnored;
 private:
 	/**
+	 * Initializes the state of the Adlib OPL driver
+	 */
+	void initialize();
+
+	/**
 	 * Loads effects data that was embedded in the music driver
 	 */
 	void loadEffectsData();
@@ -105,6 +111,11 @@ private:
 	void reset();
 
 	/**
+	 * Resets all the output frequencies
+	 */
+	void resetFrequencies();
+
+	/**
 	 * Sets the frequency for an operator
 	 */
 	void setFrequency(byte operatorNum, uint frequency);





More information about the Scummvm-git-logs mailing list