Author: sagamusix
Date: Tue Jun 25 20:30:16 2024
New Revision: 21078
URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21078
Log:
[Fix] DBM: Like in XM, offset with portamento ignores the offset command.
Modified:
trunk/OpenMPT/soundlib/Load_dbm.cpp
trunk/OpenMPT/soundlib/Snd_fx.cpp
Modified: trunk/OpenMPT/soundlib/Load_dbm.cpp
==============================================================================
--- trunk/OpenMPT/soundlib/Load_dbm.cpp Tue Jun 25 19:52:06 2024 (r21077)
+++ trunk/OpenMPT/soundlib/Load_dbm.cpp Tue Jun 25 20:30:16 2024 (r21078)
@@ -569,6 +569,14 @@
{
std::swap(cmd1, cmd2);
std::swap(param1, param2);
+ } else if(cmd1 == CMD_TONEPORTAMENTO && cmd2 == CMD_OFFSET && param2 == 0)
+ {
+ // Offset + Portmaneto: Ignore portamento. If the offset command has a non-zero parameter, keep it for effect memory.
+ cmd2 = CMD_NONE;
+ } else if(cmd2 == CMD_TONEPORTAMENTO && cmd1 == CMD_OFFSET && param1 == 0)
+ {
+ // Ditto
+ cmd1 = CMD_NONE;
}
const auto lostCommand = m.FillInTwoCommands(cmd1, param1, cmd2, param2);
Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp
==============================================================================
--- trunk/OpenMPT/soundlib/Snd_fx.cpp Tue Jun 25 19:52:06 2024 (r21077)
+++ trunk/OpenMPT/soundlib/Snd_fx.cpp Tue Jun 25 20:30:16 2024 (r21078)
@@ -1127,7 +1127,8 @@
{
if(m.command == CMD_OFFSET)
{
- ProcessSampleOffset(chn, nChn, playState);
+ if(!porta || !(GetType() & (MOD_TYPE_XM | MOD_TYPE_DBM)))
+ ProcessSampleOffset(chn, nChn, playState);
} else if(m.command == CMD_OFFSETPERCENTAGE)
{
SampleOffset(chn, Util::muldiv_unsigned(chn.nLength, m.param, 256));
@@ -3378,7 +3379,7 @@
{
// FT2 compatibility: Portamento + Offset = Ignore offset
// Test case: porta-offset.xm
- if(bPorta && GetType() == MOD_TYPE_XM)
+ if(bPorta && (GetType() & (MOD_TYPE_XM | MOD_TYPE_DBM)))
break;
ProcessSampleOffset(chn, nChn, m_PlayState);
|