Skip to content

Commit

Permalink
[Imp] MED: Improve handling of default tempo, panning and channel vol…
Browse files Browse the repository at this point in the history
…ume in files containing more than one song (fixes sugar n spice.mmd3, https://www.un4seen.com/forum/?topic=15448.msg142659#msg142659)

git-svn-id: https://source.openmpt.org/svn/openmpt/trunk/OpenMPT@20529 56274372-70c3-4bfc-bfc3-4c3a0b034d27
  • Loading branch information
sagamusix committed Apr 8, 2024
1 parent 3d5e238 commit 7c2b027
Showing 1 changed file with 24 additions and 6 deletions.
30 changes: 24 additions & 6 deletions soundlib/Load_med.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1197,12 +1197,15 @@ bool CSoundFile::ReadMED(FileReader &file, ModLoadingFlags loadFlags)
const bool is8Ch = (songHeader.flags & MMDSong::FLAG_8CHANNEL) != 0;
const bool bpmMode = (songHeader.flags2 & MMDSong::FLAG2_BPM) != 0;
const uint8 rowsPerBeat = 1 + (songHeader.flags2 & MMDSong::FLAG2_BMASK);
m_nDefaultTempo = MMDTempoToBPM(songHeader.defaultTempo, is8Ch, bpmMode, rowsPerBeat);
m_nDefaultSpeed = Clamp<uint8, uint8>(songHeader.tempo2, 1, 32);
if(bpmMode)
if(song == 0)
{
m_nDefaultRowsPerBeat = rowsPerBeat;
m_nDefaultRowsPerMeasure = m_nDefaultRowsPerBeat * 4u;
m_nDefaultTempo = MMDTempoToBPM(songHeader.defaultTempo, is8Ch, bpmMode, rowsPerBeat);
m_nDefaultSpeed = Clamp<uint8, uint8>(songHeader.tempo2, 1, 32);
if(bpmMode)
{
m_nDefaultRowsPerBeat = rowsPerBeat;
m_nDefaultRowsPerMeasure = m_nDefaultRowsPerBeat * 4u;
}
}

if(songHeader.masterVol)
Expand Down Expand Up @@ -1422,7 +1425,7 @@ bool CSoundFile::ReadMED(FileReader &file, ModLoadingFlags loadFlags)
}

// Fix jump order commands
for(const auto & [from, to] : jumpTargets)
for(const auto &[from, to] : jumpTargets)
{
PATTERNINDEX pat;
if(from > 0 && order.IsValidPat(from - 1))
Expand All @@ -1442,6 +1445,21 @@ bool CSoundFile::ReadMED(FileReader &file, ModLoadingFlags loadFlags)
numPatterns = pat + 1;
}

if(numSongs > 1)
{
PATTERNINDEX firstPat = order.EnsureUnique(0);
if(firstPat != PATTERNINDEX_INVALID)
{
for(CHANNELINDEX chn = 0; chn < m_nChannels; chn++)
{
Patterns[firstPat].WriteEffect(EffectWriter(CMD_CHANNELVOLUME, ChnSettings[chn].nVolume).Channel(chn).RetryNextRow());
Patterns[firstPat].WriteEffect(EffectWriter(CMD_PANNING8, mpt::saturate_cast<ModCommand::PARAM>(ChnSettings[chn].nPan)).Channel(chn).RetryNextRow());
}
if(firstPat >= numPatterns)
numPatterns = firstPat + 1;
}
}

basePattern += numPatterns;

if(!expData.nextModOffset || !file.Seek(expData.nextModOffset))
Expand Down

0 comments on commit 7c2b027

Please sign in to comment.