From: <sv...@op...> - 2024-06-25 18:30:24
|
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); |