[Scummvm-git-logs] scummvm master -> 7563b63b5002262b393ab0d9711bd204591e71cf

yuv422 noreply at scummvm.org
Fri Oct 25 12:54:27 UTC 2024


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

Summary:
c995cc6e97 DARKSEED: Add comment to watch logic
7563b63b50 DARKSEED: Add wiring for loading music


Commit: c995cc6e9748f6374634f1f1d021b8b4c1394f7c
    https://github.com/scummvm/scummvm/commit/c995cc6e9748f6374634f1f1d021b8b4c1394f7c
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2024-10-25T21:49:33+09:00

Commit Message:
DARKSEED: Add comment to watch logic

Changed paths:
    engines/darkseed/inventory.cpp
    engines/darkseed/usecode.cpp


diff --git a/engines/darkseed/inventory.cpp b/engines/darkseed/inventory.cpp
index 8eff0b4ec2b..4d593e79ce0 100644
--- a/engines/darkseed/inventory.cpp
+++ b/engines/darkseed/inventory.cpp
@@ -151,7 +151,7 @@ void Inventory::handleClick() {
 			   ) {
 		g_engine->handleObjCollision(icon);
 	} else if (g_engine->_actionMode == kHandAction && icon == 35) {
-		g_engine->_objectVar[35] = 0x7080;
+		g_engine->_objectVar[35] = 28800; // wind watch
 		g_engine->_console->printTosText(669);
 	} else if (g_engine->_actionMode == kLookAction) {
 		g_engine->lookCode(icon);
diff --git a/engines/darkseed/usecode.cpp b/engines/darkseed/usecode.cpp
index b776d247d50..6cc0071f203 100644
--- a/engines/darkseed/usecode.cpp
+++ b/engines/darkseed/usecode.cpp
@@ -200,7 +200,7 @@ void Darkseed::UseCode::useCode(int objNum) {
 		return;
 	}
 	if (objNum == 35) {
-		_objectVar[35] = 3600;
+		_objectVar[35] = 3600; // wind watch
 	}
 	if (objNum == 47) {
 		_player->loadAnimations("phone.nsp");


Commit: 7563b63b5002262b393ab0d9711bd204591e71cf
    https://github.com/scummvm/scummvm/commit/7563b63b5002262b393ab0d9711bd204591e71cf
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2024-10-25T21:53:22+09:00

Commit Message:
DARKSEED: Add wiring for loading music

Changed paths:
    engines/darkseed/darkseed.cpp
    engines/darkseed/room.cpp
    engines/darkseed/room.h
    engines/darkseed/sound.cpp
    engines/darkseed/sound.h


diff --git a/engines/darkseed/darkseed.cpp b/engines/darkseed/darkseed.cpp
index 56d1a729cc6..9cc98fd9c94 100644
--- a/engines/darkseed/darkseed.cpp
+++ b/engines/darkseed/darkseed.cpp
@@ -1140,7 +1140,7 @@ void DarkseedEngine::changeToRoom(int newRoomNumber, bool placeDirectly) { // AK
 	}
 	_room->initRoom();
 	updateDisplay();
-	// TODO load room song.
+	_room->loadRoomMusic();
 	_room->printRoomDescriptionText();
 }
 
diff --git a/engines/darkseed/room.cpp b/engines/darkseed/room.cpp
index 16dc15c4b2a..8e8299aaf9f 100644
--- a/engines/darkseed/room.cpp
+++ b/engines/darkseed/room.cpp
@@ -45,6 +45,78 @@ const static int roomDescriptionTextTbl[] = {
 	903
 };
 
+static constexpr MusicId roomMusicIdTbl[69] = {
+	MusicId::kQuiet,
+	MusicId::kQuiet,
+	MusicId::kQuiet,
+	MusicId::kQuiet,
+	MusicId::kQuiet,
+	MusicId::kQuiet,
+	MusicId::kQuiet,
+	MusicId::kQuiet,
+	MusicId::kQuiet,
+	MusicId::kQuiet,
+	MusicId::kOutdoor,
+	MusicId::kTown,
+	MusicId::kTown,
+	MusicId::kQuiet,
+	MusicId::kCemetry,
+	MusicId::kTown,
+	MusicId::kRadio,
+	MusicId::kLibrary,
+	MusicId::kLibrary,
+	MusicId::kLibrary,
+	MusicId::kLibrary,
+	MusicId::kLibrary,
+	MusicId::kLibrary,
+	MusicId::kNone,
+	MusicId::kCemetry,
+	MusicId::kCemetry,
+	MusicId::kCemetry,
+	MusicId::kCemetry,
+	MusicId::kLibrary,
+	MusicId::kNone,
+	MusicId::kTown,
+	MusicId::kOutdoor,
+	MusicId::kOutdoor,
+	MusicId::kOutdoor,
+	MusicId::kNone,
+	MusicId::kCemetry,
+	MusicId::kCemetry,
+	MusicId::kCemetry,
+	MusicId::kLab,
+	MusicId::kLab,
+	MusicId::kLab,
+	MusicId::kLab,
+	MusicId::kLab,
+	MusicId::kLab,
+	MusicId::kLab,
+	MusicId::kLab,
+	MusicId::kExt,
+	MusicId::kNone,
+	MusicId::kExt,
+	MusicId::kLeech,
+	MusicId::kLeech,
+	MusicId::kLeech,
+	MusicId::kNone,
+	MusicId::kExt,
+	MusicId::kExt,
+	MusicId::kExt,
+	MusicId::kLeech,
+	MusicId::kLab,
+	MusicId::kLab,
+	MusicId::kLab,
+	MusicId::kLab,
+	MusicId::kQuiet,
+	MusicId::kQuiet,
+	MusicId::kOutdoor,
+	MusicId::kTown,
+	MusicId::kOutdoor,
+	MusicId::kExt,
+	MusicId::kExt,
+	MusicId::kExt
+};
+
 Room::Room(int roomNumber) : _roomNumber(roomNumber) {
 	_room1.resize(8);
 	_walkableLocationsMap.resize(16);
@@ -1346,4 +1418,21 @@ Common::Point Room::getExitPointForRoom(uint8 roomNumber) {
 	return Common::Point();
 }
 
+MusicId Room::getMusicIdForRoom(uint8 roomNumber) {
+	if (roomNumber >= 69) {
+		error("getMusicIdForRoom: Invalid roomNumber: %d", roomNumber);
+	}
+	return roomMusicIdTbl[roomNumber];
+}
+
+void Room::loadRoomMusic() {
+	if (!g_engine->_mixer->isSoundTypeMuted(Audio::Mixer::kMusicSoundType)) { // TODO move this
+		auto newMusicId = getMusicIdForRoom(_roomNumber);
+		if ((!g_engine->_sound->isPlayingMusic() || getMusicIdForRoom(g_engine->_previousRoomNumber) != newMusicId)
+			&& newMusicId != MusicId::kNone) {
+			g_engine->_sound->playMusic(newMusicId);
+		}
+	}
+}
+
 } // End of namespace Darkseed
diff --git a/engines/darkseed/room.h b/engines/darkseed/room.h
index 0227f922265..56b723d0b94 100644
--- a/engines/darkseed/room.h
+++ b/engines/darkseed/room.h
@@ -23,9 +23,10 @@
 #define DARKSEED_ROOM_H
 
 #include "common/rect.h"
+#include "darkseed/nsp.h"
 #include "darkseed/pal.h"
 #include "darkseed/pic.h"
-#include "darkseed/nsp.h"
+#include "sound.h"
 
 namespace Darkseed {
 
@@ -106,6 +107,8 @@ public:
 	void darkenSky();
 	void loadLocationSprites(const Common::Path &path);
 	Common::Point getExitPointForRoom(uint8 roomNumber);
+	static MusicId getMusicIdForRoom(uint8 roomNumber);
+	void loadRoomMusic();
 
 private:
 	bool load();
diff --git a/engines/darkseed/sound.cpp b/engines/darkseed/sound.cpp
index 7d2cca9e81f..c585fd86cf5 100644
--- a/engines/darkseed/sound.cpp
+++ b/engines/darkseed/sound.cpp
@@ -27,6 +27,36 @@
 
 namespace Darkseed {
 
+static constexpr char musicDosFloppyFilenameTbl[][14] = {
+	"lab1",
+	"victory1",
+	"cemetry1",
+	"leech1",
+	"ext1",
+	"quiet",
+	"package",
+	"dth",
+	"library",
+	"radio",
+	"outdoor",
+	"town"
+};
+
+static constexpr char musicDosCDFilenameTbl[][14] = {
+	"lab.mid",
+	"victory.mid",
+	"cemetery.mid",
+	"leech.mid",
+	"exterior.mid",
+	"passtime.mid",
+	"mirrorst.mid",
+	"dth.mid",
+	"lib_moz.mid",
+	"carradio.mid",
+	"greenwal.mid",
+	"walktown.mid"
+};
+
 Sound::Sound(Audio::Mixer *mixer) : _mixer(mixer) {
 	_didSpeech.resize(978);
 	resetSpeech();
@@ -53,6 +83,10 @@ bool Sound::isPlayingSpeech() const {
 	return _mixer->isSoundHandleActive(_speechHandle);
 }
 
+bool Sound::isPlayingMusic() {
+	return _isPlayingMusic;
+}
+
 void Sound::waitForSpeech() {
 	while (isPlayingSpeech()) {
 		// TODO poll events / wait a bit here.
@@ -65,6 +99,26 @@ void Sound::resetSpeech() {
 	}
 }
 
+void Sound::playMusic(MusicId musicId) {
+	if (musicId == MusicId::kNone) {
+		return;
+	}
+	int filenameIdx = static_cast<uint8>(musicId) - 1;
+	playMusic(g_engine->isCdVersion()
+		? musicDosCDFilenameTbl[filenameIdx]
+		: musicDosFloppyFilenameTbl[filenameIdx]);
+}
+
+void Sound::playMusic(Common::String const &filename) {
+	debug("Loading music: %s", filename.c_str());
+	_isPlayingMusic = true;
+	// TODO load music.
+}
+
+void Sound::stopMusic() {
+	_isPlayingMusic = false;
+}
+
 Common::Error Sound::sync(Common::Serializer &s) {
 	s.syncArray(_didSpeech.data(), _didSpeech.size(), Common::Serializer::Byte);
 	return Common::kNoError;
diff --git a/engines/darkseed/sound.h b/engines/darkseed/sound.h
index 661f0c58d06..7f3836e8c73 100644
--- a/engines/darkseed/sound.h
+++ b/engines/darkseed/sound.h
@@ -24,15 +24,31 @@
 
 #include "audio/mixer.h"
 #include "common/array.h"
-#include "common/serializer.h"
 #include "common/error.h"
+#include "common/serializer.h"
 
 namespace Darkseed {
+enum class MusicId : uint8 {
+	kNone = 0,
+	kLab,
+	kVictory,
+	kCemetry,
+	kLeech,
+	kExt,
+	kQuiet,
+	kPackage,
+	kDth,
+	kLibrary,
+	kRadio,
+	kOutdoor,
+	kTown,
+};
 
 class Sound {
 	Audio::Mixer *_mixer;
 	Audio::SoundHandle _speechHandle;
 	Common::Array<uint8> _didSpeech;
+	bool _isPlayingMusic = false;
 
 public:
 	explicit Sound(Audio::Mixer *mixer);
@@ -41,8 +57,12 @@ public:
 
 	void playTosSpeech(int tosIdx);
 	bool isPlayingSpeech() const;
+	bool isPlayingMusic();
 	void waitForSpeech();
 	void resetSpeech();
+	void playMusic(MusicId musicId);
+	void playMusic(Common::String const &filename);
+	void stopMusic();
 };
 
 } // namespace Darkseed




More information about the Scummvm-git-logs mailing list