[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