[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