[Scummvm-git-logs] scummvm master -> 8ab11ade87d59038ccf4962e08d82075dcdb7a8c

mduggan mgithub at guarana.org
Sun Sep 27 07:39:42 UTC 2020


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:
8ab11ade87 ULTIMA8: Fix music order for Crusader


Commit: 8ab11ade87d59038ccf4962e08d82075dcdb7a8c
    https://github.com/scummvm/scummvm/commit/8ab11ade87d59038ccf4962e08d82075dcdb7a8c
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2020-09-27T14:45:55+09:00

Commit Message:
ULTIMA8: Fix music order for Crusader

Changed paths:
    engines/ultima/ultima8/audio/remorse_music_process.cpp
    engines/ultima/ultima8/audio/remorse_music_process.h
    engines/ultima/ultima8/games/start_crusader_process.cpp
    engines/ultima/ultima8/gumps/remorse_menu_gump.cpp
    engines/ultima/ultima8/usecode/remorse_intrinsics.h
    engines/ultima/ultima8/world/actors/actor.cpp


diff --git a/engines/ultima/ultima8/audio/remorse_music_process.cpp b/engines/ultima/ultima8/audio/remorse_music_process.cpp
index 1eea5fd860..d082e0e660 100644
--- a/engines/ultima/ultima8/audio/remorse_music_process.cpp
+++ b/engines/ultima/ultima8/audio/remorse_music_process.cpp
@@ -33,12 +33,12 @@
 namespace Ultima {
 namespace Ultima8 {
 
-static const int MAX_TRACK = 21;
+static const int MAX_TRACK_REMORSE = 21;
+static const int MAX_TRACK_REGRET = 22;
 
-// TODO: Ensure this is the right order for the uses of this from Usecode.
-static const char *TRACK_FILE_NAMES[] = {
+// NOTE: This order is chosen to match the list in Crusader: No Remorse.
+static const char *TRACK_FILE_NAMES_REMORSE[] = {
 	nullptr,
-	"cred",
 	"M01",
 	"M02",
 	"M03",
@@ -57,14 +57,45 @@ static const char *TRACK_FILE_NAMES[] = {
 	"M16A",
 	"M16B",
 	"M16C",
+	"cred",
 	"menu",
 	"buyme" // for demo
 };
 
+static const char *TRACK_FILE_NAMES_REGRET[] = {
+	nullptr,
+	"ninth",
+	"phil",
+	"straight",
+	"party",
+	"demo",
+	"stint",
+	"mk",
+	"space2",
+	"d3",
+	"space",
+	"rhythm",
+	"intent",
+	"m03",
+	"silver",
+	"m01",
+	"techno",
+	"cred",
+	"regret",
+	"m13",
+	"retro",
+	"metal",
+	"xmas" // for demo
+};
+
+
 // p_dynamic_cast stuff
 DEFINE_RUNTIME_CLASSTYPE_CODE(RemorseMusicProcess)
 
-RemorseMusicProcess::RemorseMusicProcess() : MusicProcess(), _currentTrack(0), _savedTrack(0), _combatMusicActive(false) {
+RemorseMusicProcess::RemorseMusicProcess() : MusicProcess(), _currentTrack(0), _savedTrack(0), _m16offset(0), _combatMusicActive(false) {
+	_maxTrack = (GAME_IS_REMORSE ? MAX_TRACK_REMORSE : MAX_TRACK_REGRET);
+	_trackNames = (GAME_IS_REMORSE ? TRACK_FILE_NAMES_REMORSE
+				   : TRACK_FILE_NAMES_REGRET);
 }
 
 RemorseMusicProcess::~RemorseMusicProcess() {
@@ -104,11 +135,17 @@ void RemorseMusicProcess::restoreTrackState() {
 }
 
 void RemorseMusicProcess::playMusic_internal(int track) {
-	if (track < 0 || track > MAX_TRACK) {
+	if (track < 0 || track > _maxTrack) {
 		playMusic_internal(0);
 		return;
 	}
 
+	if (GAME_IS_REMORSE && track == 16) {
+		// Loop through m16a / m16b / m16c
+		track += _m16offset;
+		_m16offset = (_m16offset + 1) % 4;
+	}
+
 	Audio::Mixer *mixer = Ultima8Engine::get_instance()->_mixer;
 	assert(mixer);
 
@@ -121,7 +158,7 @@ void RemorseMusicProcess::playMusic_internal(int track) {
 
 	if (track > 0) {
 		// TODO: It's a bit ugly having this here.  Should be in GameData.
-		const Std::string fname = Std::string::format("@game/sound/%s.amf", TRACK_FILE_NAMES[track]);
+		const Std::string fname = Std::string::format("@game/sound/%s.amf", _trackNames[track]);
 		FileSystem *filesystem = FileSystem::get_instance();
 		assert(filesystem);
 		Common::SeekableReadStream *rs = filesystem->ReadFile(fname);
diff --git a/engines/ultima/ultima8/audio/remorse_music_process.h b/engines/ultima/ultima8/audio/remorse_music_process.h
index 6ee50432b6..601a49bdd4 100644
--- a/engines/ultima/ultima8/audio/remorse_music_process.h
+++ b/engines/ultima/ultima8/audio/remorse_music_process.h
@@ -52,8 +52,13 @@ private:
 
 	int _savedTrack;
 
+	uint8 _m16offset;
+
 	Audio::SoundHandle _soundHandle;
 
+	int _maxTrack;
+	const char **_trackNames;
+
 public:
 	RemorseMusicProcess();
 	~RemorseMusicProcess() override;
diff --git a/engines/ultima/ultima8/games/start_crusader_process.cpp b/engines/ultima/ultima8/games/start_crusader_process.cpp
index e8e24ab6db..4d3c51c42d 100644
--- a/engines/ultima/ultima8/games/start_crusader_process.cpp
+++ b/engines/ultima/ultima8/games/start_crusader_process.cpp
@@ -122,7 +122,7 @@ void StartCrusaderProcess::run() {
 		Kernel::get_instance()->addProcess(fader);
 	}
 
-	MusicProcess::get_instance()->playMusic(2);
+	MusicProcess::get_instance()->playMusic(1);
 
 	Ultima8Engine::get_instance()->setAvatarInStasis(false);
 
diff --git a/engines/ultima/ultima8/gumps/remorse_menu_gump.cpp b/engines/ultima/ultima8/gumps/remorse_menu_gump.cpp
index e1110b1ef8..0777cdba11 100644
--- a/engines/ultima/ultima8/gumps/remorse_menu_gump.cpp
+++ b/engines/ultima/ultima8/gumps/remorse_menu_gump.cpp
@@ -51,6 +51,9 @@ namespace Ultima8 {
 
 DEFINE_RUNTIME_CLASSTYPE_CODE(RemorseMenuGump)
 
+static const int MENU_MUSIC_REMORSE = 21;
+static const int MENU_MUSIC_REGRET = 18;
+
 RemorseMenuGump::RemorseMenuGump()
 	: ModalGump(0, 0, 640, 480, 0, FLAG_DONT_SAVE) {
 
@@ -62,8 +65,10 @@ RemorseMenuGump::RemorseMenuGump()
 	MusicProcess *musicprocess = MusicProcess::get_instance();
 	if (musicprocess) {
 		musicprocess->saveTrackState();
+
+		int track = GAME_IS_REMORSE ? MENU_MUSIC_REMORSE : MENU_MUSIC_REGRET;
 		// Play the menu music
-		musicprocess->playMusic(20);
+		musicprocess->playMusic(track);
 	}
 	MetaEngine::setGameMenuActive(true);
 }
diff --git a/engines/ultima/ultima8/usecode/remorse_intrinsics.h b/engines/ultima/ultima8/usecode/remorse_intrinsics.h
index f92001ec31..a03cfd2973 100644
--- a/engines/ultima/ultima8/usecode/remorse_intrinsics.h
+++ b/engines/ultima/ultima8/usecode/remorse_intrinsics.h
@@ -41,7 +41,7 @@ Intrinsic RemorseIntrinsics[] = {
 	Item::I_getMapArray, // See TRIGGER::ordinal21 - stored in a variable 'mapNum'
 	Item::I_getStatus,
 	Item::I_orStatus,
-	Item::I_equip, // void Intrinsic006(6 bytes) - TODO: confirm this
+	Item::I_equip, // void Intrinsic006(6 bytes)
 	Item::I_isOnScreen, //
 	Actor::I_isNPC, // byte Intrinsic008(Item *)
 	Item::I_getZ, // byte Intrinsic009(Item *)
@@ -49,12 +49,12 @@ Intrinsic RemorseIntrinsics[] = {
 	Actor::I_getUnkByte, // get something about npcdata - struct byte 0x63 (99)
 	Ultima8Engine::I_setAvatarInStasis, // void Intrinsic00C(2 bytes)
 	Item::I_getDirToItem, // byte Intrinsic00D(6 bytes)
-	Actor::I_turnToward, // TODO: Actor::I_turnToward(Actor *, direction, unk)
+	Actor::I_turnToward,
 	0, // TODO: VideoGump::I_playVideo(item, vidname, int16 sizex, int16 sizey)
 	// 0x010
 	Item::I_getQLo, // Based on having same coff as 02B
 	Actor::I_getMap, // int Intrinsic011(4 bytes)
-	MusicProcess::I_playMusic, // void Intrinsic012(2 bytes) TODO: Make sure the track list order is right (I don't think it is..)
+	MusicProcess::I_playMusic, // void Intrinsic012(2 bytes)
 	Item::I_getX, //int Intrinsic013(4 bytes)
 	Item::I_getY, //int Intrinsic014(4 bytes)
 	AudioProcess::I_playSFXCru,
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index f42dd51d60..a527c38ce2 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -2231,6 +2231,7 @@ uint32 Actor::I_turnToward(const uint8 *args, unsigned int /*argsize*/) {
 
 	ARG_UINT16(dir);
 	ARG_UINT16(unk);
+	warning("Actor::I_turnToward: Ignoring unknown param %d", unk);
 
 	return actor->turnTowardDir(Direction_FromUsecodeDir(dir));
 }




More information about the Scummvm-git-logs mailing list