[Scummvm-git-logs] scummvm master -> 2f3b74e485a5c0438e2214afe8e14fc672bab459

a-yyg 76591232+a-yyg at users.noreply.github.com
Fri Aug 20 18:55:29 UTC 2021


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:
2f3b74e485 SAGA2: Enable subtitle options in GMM


Commit: 2f3b74e485a5c0438e2214afe8e14fc672bab459
    https://github.com/scummvm/scummvm/commit/2f3b74e485a5c0438e2214afe8e14fc672bab459
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-08-21T03:52:58+09:00

Commit Message:
SAGA2: Enable subtitle options in GMM

Changed paths:
    engines/saga2/audio.cpp
    engines/saga2/saga2.cpp
    engines/saga2/saga2.h


diff --git a/engines/saga2/audio.cpp b/engines/saga2/audio.cpp
index abdea77a48..ec60e4dec0 100644
--- a/engines/saga2/audio.cpp
+++ b/engines/saga2/audio.cpp
@@ -40,8 +40,6 @@
 
 namespace Saga2 {
 
-AudioInterface *audio;
-
 static const StaticPoint32 VeryFarAway = {32767, 32766};
 
 const uint32 fullVolumeDist = 75;
@@ -129,7 +127,7 @@ void startAudio(void) {
 	if (voiceRes == NULL)
 		error("Laryngitis Error (No voice resource context)!\n");
 
-	audio->initAudioInterface(musicRes);
+	g_vm->_audio->initAudioInterface(musicRes);
 
 	// kludgy in memory click sounds
 	clickSizes[0] = 0;
@@ -145,8 +143,8 @@ void startAudio(void) {
 
 
 void audioEventLoop(void) {
-	if (audio->playFlag())
-		audio->playMe();
+	if (g_vm->_audio->playFlag())
+		g_vm->_audio->playMe();
 
 	audioEnvironmentCheck();
 }
@@ -214,17 +212,17 @@ void resumeMusic(void) {
 }
 
 void suspendAudio(void) {
-	if (audio) {
+	if (g_vm->_audio) {
 		suspendMusic();
 		suspendLoops();
-		audio->suspend();
+		g_vm->_audio->suspend();
 	}
 }
 
 void resumeAudio(void) {
-	if (audio) {
+	if (g_vm->_audio) {
 		if (soundRes != NULL || voiceRes != NULL) {
-			audio->resume();
+			g_vm->_audio->resume();
 			resumeLoops();
 			resumeMusic();
 		}
@@ -235,15 +233,15 @@ void resumeAudio(void) {
 //  UI volume change hook
 
 void volumeChanged(void) {
-	if (audio->getVolume(kVolSfx))
+	if (g_vm->_audio->getVolume(kVolSfx))
 		resumeLoops();
 	else
 		suspendLoops();
 
-	if (audio->getVolume(kVolMusic)) {
+	if (g_vm->_audio->getVolume(kVolMusic)) {
 		resumeMusic();
 
-		audio->_music->syncSoundSettings();
+		g_vm->_audio->_music->syncSoundSettings();
 	} else
 		suspendMusic();
 }
@@ -270,9 +268,9 @@ void playMusic(uint32 s) {
 	debugC(1, kDebugSound, "playMusic(%s)", tag2strP(s));
 
 	if (hResCheckResID(musicRes, s)) {
-		audio->playMusic(s, 1);
+		g_vm->_audio->playMusic(s, 1);
 	} else
-		audio->stopMusic();
+		g_vm->_audio->stopMusic();
 }
 
 //-----------------------------------------------------------------------
@@ -283,7 +281,7 @@ void playMemSound(uint32 s) {
 
 	Audio::AudioStream *aud = Audio::makeRawStream(clickData[s], clickSizes[s], 22050, Audio::FLAG_16BITS | Audio::FLAG_LITTLE_ENDIAN, DisposeAfterUse::NO);
 
-	g_system->getMixer()->playStream(Audio::Mixer::kSFXSoundType, &audio->_clickSoundHandle, aud);
+	g_system->getMixer()->playStream(Audio::Mixer::kSFXSoundType, &g_vm->_audio->_clickSoundHandle, aud);
 }
 
 //-----------------------------------------------------------------------
@@ -293,7 +291,7 @@ void playSound(uint32 s) {
 	debugC(1, kDebugSound, "playSound(%s)", tag2strP(s));
 
 	if (hResCheckResID(soundRes, s))
-		audio->queueSound(s, 1, Here);
+		g_vm->_audio->queueSound(s, 1, Here);
 }
 
 //-----------------------------------------------------------------------
@@ -303,9 +301,9 @@ void playLongSound(uint32 s) {
 	debugC(1, kDebugSound, "playLongSound(%s)", tag2strP(s));
 
 	if (hResCheckResID(longRes, s))
-		audio->queueVoice(s);
+		g_vm->_audio->queueVoice(s);
 	else
-		audio->stopVoice();
+		g_vm->_audio->stopVoice();
 }
 
 //-----------------------------------------------------------------------
@@ -316,9 +314,9 @@ void playVoice(uint32 s) {
 
 	if (hResCheckResID(voiceRes, s)) {
 		if (s)
-			audio->queueVoice(s, Here);
+			g_vm->_audio->queueVoice(s, Here);
 		else
-			audio->stopVoice();
+			g_vm->_audio->stopVoice();
 	}
 }
 
@@ -336,8 +334,8 @@ bool sayVoice(uint32 s[]) {
 	bool worked = false;
 
 	if (hResCheckResID(voiceRes, s)) {
-		audio->queueVoice(s, Here);
-		if (audio->talking())
+		g_vm->_audio->queueVoice(s, Here);
+		if (g_vm->_audio->talking())
 			worked = true;
 	}
 
@@ -349,15 +347,15 @@ bool sayVoice(uint32 s[]) {
 
 void _playLoop(uint32 s) {
 	currentLoop = s;
-	if (currentLoop == audio->currentLoop())
+	if (currentLoop == g_vm->_audio->currentLoop())
 		return;
 
-	audio->stopLoop();
+	g_vm->_audio->stopLoop();
 
 	if (!s)
 		return;
 
-	audio->playLoop(s, 0, Here);
+	g_vm->_audio->playLoop(s, 0, Here);
 }
 
 //-----------------------------------------------------------------------
@@ -378,7 +376,7 @@ void playSoundAt(uint32 s, Point32 p) {
 	debugC(1, kDebugSound, "playSoundAt(%s, %d,%d)", tag2strP(s), p.x, p.y);
 
 	if (hResCheckResID(soundRes, s))
-		audio->queueSound(s, 1, p);
+		g_vm->_audio->queueSound(s, 1, p);
 }
 
 void playSoundAt(uint32 s, Location playAt) {
@@ -398,7 +396,7 @@ bool sayVoiceAt(uint32 s[], Point32 p) {
 
 	debugC(1, kDebugSound, "], %d,%d)", p.x, p.y);
 
-	audio->queueVoice(s, p);
+	g_vm->_audio->queueVoice(s, p);
 
 	return true;
 }
@@ -417,9 +415,9 @@ void playLoopAt(uint32 s, Point32 loc) {
 	debugC(1, kDebugSound, "playLoopAt(%s, %d,%d)", tag2strP(s), loc.x, loc.y);
 
 	if (hResCheckResID(loopRes, s))
-		audio->playLoop(s, 0, loc);
+		g_vm->_audio->playLoop(s, 0, loc);
 	else
-		audio->stopLoop();
+		g_vm->_audio->stopLoop();
 }
 
 void addAuxTheme(Location loc, uint32 lid);
@@ -440,7 +438,7 @@ void playLoopAt(uint32 s, Location playAt) {
 // loop attenuation
 
 void moveLoop(Point32 loc) {
-	audio->setLoopPosition(loc);
+	g_vm->_audio->setLoopPosition(loc);
 }
 
 void moveLoop(Location loc) {
@@ -454,7 +452,7 @@ void moveLoop(Location loc) {
 // supplemental interface check for speech
 
 bool stillDoingVoice(uint32 sampno) {
-	bool result = audio->saying(sampno);
+	bool result = g_vm->_audio->saying(sampno);
 
 	debugC(1, kDebugSound, "stillDoingVoice(%s) -> %d", tag2strP(sampno), result);
 
@@ -465,7 +463,7 @@ bool stillDoingVoice(uint32 s[]) {
 	uint32 *p = s;
 
 	while (*p) {
-		if (audio->saying(*p++))
+		if (g_vm->_audio->saying(*p++))
 			return true;
 	}
 
@@ -545,12 +543,12 @@ void PlayMusic(char IDstr[]) {
 ////////////////////////////////////////////////////////////////
 
 bool initAudio() {
-	audio = new AudioInterface();
+	g_vm->_audio = new AudioInterface();
 	return true;
 }
 
 void cleanupAudio() {
-	delete audio;
+	delete g_vm->_audio;
 }
 
 AudioInterface::AudioInterface() {
@@ -583,7 +581,7 @@ void AudioInterface::playMe(void) {
 
 		Common::SeekableReadStream *stream = loadResourceToStream(voiceRes, si.seg, "voice data");
 		Audio::AudioStream *aud = makeShortenStream(*stream);
-		byte vol = volumeFromDist(si.loc, getVolume(kVolVoice));
+		byte vol = g_vm->_speechVoice ? volumeFromDist(si.loc, getVolume(kVolVoice)) : 0;
 
 		_mixer->playStream(Audio::Mixer::kSpeechSoundType, &_speechSoundHandle, aud, -1, vol);
 
@@ -633,7 +631,7 @@ void AudioInterface::playLoop(uint32 s, int16 loopFactor, Point32 where) {
 	Audio::AudioStream *laud = Audio::makeLoopingAudioStream(aud, loopFactor);
 	byte vol = volumeFromDist(where, getVolume(kVolSfx));
 
-	_mixer->playStream(Audio::Mixer::kSFXSoundType, &audio->_loopSoundHandle, laud, -1, vol);
+	_mixer->playStream(Audio::Mixer::kSFXSoundType, &g_vm->_audio->_loopSoundHandle, laud, -1, vol);
 }
 
 void AudioInterface::stopLoop(void) {
diff --git a/engines/saga2/saga2.cpp b/engines/saga2/saga2.cpp
index 707c3aa4d0..759ae6d6f0 100644
--- a/engines/saga2/saga2.cpp
+++ b/engines/saga2/saga2.cpp
@@ -35,6 +35,7 @@
 #include "saga2/saga2.h"
 #include "saga2/fta.h"
 
+#include "saga2/audio.h"
 #include "saga2/band.h"
 #include "saga2/beegee.h"
 #include "saga2/contain.h"
@@ -43,6 +44,7 @@
 #include "saga2/imagcach.h"
 #include "saga2/mouseimg.h"
 #include "saga2/motion.h"
+#include "saga2/music.h"
 #include "saga2/panel.h"
 #include "saga2/spelshow.h"
 
@@ -63,6 +65,8 @@ Saga2Engine::Saga2Engine(OSystem *syst)
 
 	_console = nullptr;
 	_renderer = nullptr;
+	_audio = nullptr;
+
 	_bandList = nullptr;
 	_mouseInfo = nullptr;
 	_smkDecoder = nullptr;
@@ -74,6 +78,8 @@ Saga2Engine::Saga2Engine(OSystem *syst)
 	_autoWeapon = true;
 	_showNight = true;
 	_speechText = true;
+	_speechVoice = true;
+
 	_showPosition = false;
 	_showStats = false;
 	_teleportOnClick = false;
@@ -154,7 +160,8 @@ bool Saga2Engine::hasFeature(EngineFeature f) const {
 	return
 		(f == kSupportsReturnToLauncher) ||
 		(f == kSupportsLoadingDuringRuntime) ||
-		(f == kSupportsSavingDuringRuntime);
+		(f == kSupportsSavingDuringRuntime) ||
+		(f == kSupportsSubtitleOptions);
 }
 
 Common::Error Saga2Engine::loadGameStream(Common::SeekableReadStream *stream) {
@@ -211,6 +218,23 @@ Common::Error Saga2Engine::loadGameState(int slot) {
 	return Common::kNoError;
 }
 
+void Saga2Engine::syncSoundSettings() {
+	Engine::syncSoundSettings();
+
+	_speechText = true;
+
+	if (ConfMan.hasKey("subtitles"))
+		_speechText = ConfMan.getBool("subtitles");
+
+	_speechVoice = true;
+
+	if (ConfMan.hasKey("speech_mute"))
+		_speechVoice = !ConfMan.getBool("speech_mute");
+
+	if (_audio)
+		_audio->_music->syncSoundSettings();
+}
+
 void Saga2Engine::syncGameStream(Common::Serializer &s) {
 	// Use methods of Serializer to save/load fields
 	int dummy = 0;
@@ -355,11 +379,6 @@ void Saga2Engine::readConfig() {
 	if (ConfMan.hasKey("show_night"))
 		_showNight = ConfMan.getBool("show_night");
 
-	_speechText = true;
-
-	if (ConfMan.hasKey("subtitles"))
-		_speechText = ConfMan.getBool("subtitles");
-
 	syncSoundSettings();
 }
 
diff --git a/engines/saga2/saga2.h b/engines/saga2/saga2.h
index 57548414f3..ce89adcdfb 100644
--- a/engines/saga2/saga2.h
+++ b/engines/saga2/saga2.h
@@ -78,6 +78,7 @@ class Deejay;
 class frameSmoother;
 class frameCounter;
 class CMapFeature;
+class AudioInterface;
 
 enum {
 	kDebugResources = 1 << 0,
@@ -111,6 +112,7 @@ public:
 	Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave = false) override;
 	Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave) override;
 	Common::Error loadGameState(int slot) override;
+	void syncSoundSettings() override;
 
 	Common::String getSavegameFile(int num);
 
@@ -133,6 +135,7 @@ public:
 	Common::RandomSource *_rnd;
 	Console *_console;
 	Renderer *_renderer;
+	AudioInterface *_audio;
 
 	WeaponStuff _weaponRack[kMaxWeapons];
 	weaponID _loadedWeapons;
@@ -180,9 +183,10 @@ public:
 	bool _autoWeapon;
 	bool _showNight;
 	bool _speechText;
+	bool _speechVoice;
+
 	bool _teleportOnClick;
 	bool _teleportOnMap;
-
 	bool _showPosition;
 	bool _showStats;
 




More information about the Scummvm-git-logs mailing list