[Scummvm-git-logs] scummvm master -> 284f42d55507edfdede43f302d7fefd413ac7f50
aquadran
aquadran at gmail.com
Tue Nov 17 05:36:47 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:
284f42d555 SCUMM: COMI (Demo): properly handle demo music and transitions (#2622)
Commit: 284f42d55507edfdede43f302d7fefd413ac7f50
https://github.com/scummvm/scummvm/commit/284f42d55507edfdede43f302d7fefd413ac7f50
Author: AndywinXp (andywinxp at gmail.com)
Date: 2020-11-17T06:36:43+01:00
Commit Message:
SCUMM: COMI (Demo): properly handle demo music and transitions (#2622)
* SCUMM: COMI (Demo): properly handle demo music and transitions
Changed paths:
engines/scumm/imuse_digi/dimuse.h
engines/scumm/imuse_digi/dimuse_music.cpp
engines/scumm/imuse_digi/dimuse_script.cpp
engines/scumm/imuse_digi/dimuse_tables.cpp
engines/scumm/imuse_digi/dimuse_tables.h
diff --git a/engines/scumm/imuse_digi/dimuse.h b/engines/scumm/imuse_digi/dimuse.h
index 485922d3fc..df173867fb 100644
--- a/engines/scumm/imuse_digi/dimuse.h
+++ b/engines/scumm/imuse_digi/dimuse.h
@@ -116,7 +116,9 @@ private:
void setComiMusicState(int stateId);
void setComiMusicSequence(int seqId);
+ void setComiDemoMusicState(int stateId);
void playComiMusic(const char *songName, const imuseComiTable *table, int attribPos, bool sequence);
+ void playComiDemoMusic(const char *songName, const imuseComiTable *table, int attribPos);
void setDigMusicState(int stateId);
void setDigMusicSequence(int seqId);
diff --git a/engines/scumm/imuse_digi/dimuse_music.cpp b/engines/scumm/imuse_digi/dimuse_music.cpp
index 5c3cf30dbd..48cac62eeb 100644
--- a/engines/scumm/imuse_digi/dimuse_music.cpp
+++ b/engines/scumm/imuse_digi/dimuse_music.cpp
@@ -277,6 +277,28 @@ void IMuseDigital::setComiMusicSequence(int seqId) {
_curMusicSeq = num;
}
+void IMuseDigital::setComiDemoMusicState(int stateNum) {
+ if (stateNum == -1)
+ return;
+
+ if (_curMusicState == stateNum)
+ return;
+
+ if (stateNum != 0 && stateNum != 2 && stateNum != 4 && stateNum != 8 && stateNum != 9 && stateNum != 16) {
+ debug(5, "Tried to set music state to num: %d, defaulting to 0", stateNum);
+ stateNum = 0;
+ }
+
+ if (_curMusicSeq == 0) {
+ if (stateNum == 0)
+ playComiDemoMusic(NULL, &_comiDemoStateMusicTable[0], stateNum);
+ else
+ playComiDemoMusic(_comiDemoStateMusicTable[stateNum].name, &_comiDemoStateMusicTable[stateNum], stateNum);
+ }
+
+ _curMusicState = stateNum;
+}
+
void IMuseDigital::playComiMusic(const char *songName, const imuseComiTable *table, int attribPos, bool sequence) {
int hookId = 0;
@@ -343,6 +365,52 @@ void IMuseDigital::playComiMusic(const char *songName, const imuseComiTable *tab
}
}
+void IMuseDigital::playComiDemoMusic(const char *songName, const imuseComiTable *table, int attribPos) {
+ int hookId = 0;
+
+ if ((songName != NULL) && (attribPos != 0)) {
+ if (table->attribPos != 0)
+ attribPos = table->attribPos;
+ hookId = _attributes[COMI_STATE_OFFSET + attribPos];
+ if (table->hookId != 0) {
+ if ((hookId != 0) && (table->hookId > 1)) {
+ _attributes[COMI_STATE_OFFSET + attribPos] = 2;
+ }
+ else {
+ _attributes[COMI_STATE_OFFSET + attribPos] = hookId + 1;
+ if (table->hookId < hookId + 1)
+ _attributes[COMI_STATE_OFFSET + attribPos] = 1;
+ }
+ }
+ }
+
+ if (!songName) {
+ fadeOutMusic(120);
+ return;
+ }
+
+ switch (table->transitionType) {
+ case 0:
+ default:
+ break;
+ case 3:
+ if (table->filename[0] == 0) {
+ fadeOutMusic(60);
+ return;
+ }
+ if (getCurMusicSoundId() == table->soundId)
+ return;
+ if ((table->attribPos != 0) &&
+ (table->attribPos == _comiDemoStateMusicTable[_curMusicState].attribPos)) {
+ fadeOutMusicAndStartNew(table->fadeOutDelay, table->filename, table->soundId);
+ } else {
+ fadeOutMusic(table->fadeOutDelay);
+ startMusic(table->filename, table->soundId, hookId, 127);
+ }
+ break;
+ }
+}
+
void IMuseDigital::setFtMusicState(int stateId) {
if (stateId > 48)
return;
diff --git a/engines/scumm/imuse_digi/dimuse_script.cpp b/engines/scumm/imuse_digi/dimuse_script.cpp
index f5b5f19560..c906a927c2 100644
--- a/engines/scumm/imuse_digi/dimuse_script.cpp
+++ b/engines/scumm/imuse_digi/dimuse_script.cpp
@@ -100,24 +100,7 @@ void IMuseDigital::parseScriptCmds(int cmd, int b, int c, int d, int e, int f, i
}
}
} else if ((_vm->_game.id == GID_CMI) && (_vm->_game.features & GF_DEMO)) {
- if (b == 2) {
- fadeOutMusic(108);
- startMusic("in1.imx", 1100, 0, 127);
- } else if (b == 4) {
- fadeOutMusic(108);
- startMusic("in2.imx", 1120, 0, 127);
- } else if (b == 8) {
- fadeOutMusic(108);
- startMusic("out1.imx", 1140, 0, 127);
- } else if (b == 9) {
- fadeOutMusic(108);
- startMusic("out2.imx", 1150, 0, 127);
- } else if (b == 16) {
- fadeOutMusic(108);
- startMusic("gun.imx", 1210, 0, 127);
- } else {
- fadeOutMusic(120);
- }
+ setComiDemoMusicState(b);
} else if (_vm->_game.id == GID_DIG) {
setDigMusicState(b);
} else if (_vm->_game.id == GID_CMI) {
diff --git a/engines/scumm/imuse_digi/dimuse_tables.cpp b/engines/scumm/imuse_digi/dimuse_tables.cpp
index bae081b308..9bbafb8278 100644
--- a/engines/scumm/imuse_digi/dimuse_tables.cpp
+++ b/engines/scumm/imuse_digi/dimuse_tables.cpp
@@ -473,6 +473,27 @@ const imuseComiTable _comiSeqMusicTable[] = {
{0, -1, "", 0, 0, 0, ""}
};
+const imuseComiTable _comiDemoStateMusicTable[] = {
+ { 0, 1000, "STATE_NULL", 0, 0, 0, "" }, /* 00 */
+ { 0, 1001, "stateNoChange", 0, 0, 0, "" }, /* 01 */
+ { 3, 1100, "stateHold1", 2, 0, 60, "in1.imx" }, /* 02 */
+ { 0, 1001, "empty", 0, 0, 0, "" }, /* 03 */
+ { 3, 1120, "stateHold2", 4, 0, 60, "in2.imx" }, /* 04 */
+ { 0, 1001, "empty", 0, 0, 0, "" }, /* 05 */
+ { 0, 1001, "empty", 0, 0, 0, "" }, /* 06 */
+ { 0, 1001, "empty", 0, 0, 0, "" }, /* 07 */
+ { 3, 1140, "stateWaterline1", 2, 0, 60, "out1.imx" }, /* 08 */
+ { 3, 1150, "stateWaterline2", 4, 0, 60, "out2.imx" }, /* 09 */
+ { 0, 1001, "empty", 0, 0, 0, "" }, /* 10 */
+ { 0, 1001, "empty", 0, 0, 0, "" }, /* 11 */
+ { 0, 1001, "empty", 0, 0, 0, "" }, /* 12 */
+ { 0, 1001, "empty", 0, 0, 0, "" }, /* 13 */
+ { 0, 1001, "empty", 0, 0, 0, "" }, /* 14 */
+ { 0, 1001, "empty", 0, 0, 0, "" }, /* 15 */
+ { 3, 1210, "stateCannon", 4, 0, 60, "gun.imx" }, /* 16 */
+ { 0, -1, "", 0, 0, 0, "" }
+};
+
const imuseFtStateTable _ftStateMusicTable[] = {
{"", 0, 0, "STATE_NULL" },
{"", 4, 127, "stateKstandOutside" },
diff --git a/engines/scumm/imuse_digi/dimuse_tables.h b/engines/scumm/imuse_digi/dimuse_tables.h
index cb8393d4d7..1c981d8124 100644
--- a/engines/scumm/imuse_digi/dimuse_tables.h
+++ b/engines/scumm/imuse_digi/dimuse_tables.h
@@ -78,6 +78,7 @@ extern const imuseDigTable _digStateMusicTable[];
extern const imuseDigTable _digSeqMusicTable[];
extern const imuseComiTable _comiStateMusicTable[];
extern const imuseComiTable _comiSeqMusicTable[];
+extern const imuseComiTable _comiDemoStateMusicTable[];
extern const imuseFtStateTable _ftStateMusicTable[];
extern const imuseFtSeqTable _ftSeqMusicTable[];
extern const imuseFtNames _ftSeqNames[];
More information about the Scummvm-git-logs
mailing list