From: <sag...@us...> - 2010-04-27 21:15:06
|
Revision: 578 http://modplug.svn.sourceforge.net/modplug/?rev=578&view=rev Author: saga-games Date: 2010-04-27 21:14:59 +0000 (Tue, 27 Apr 2010) Log Message: ----------- [Fix] Mod Conversion: S00 (IT/S3M) does not equal E00 (MOD/XM), as Exx doesn't have effect memory. Trying to convert S00 to the last used value now. [Ref] That one comparison that was changed in Snd_fx.cpp in the last revision might have worked, but it's looking slightly wrong... Modified Paths: -------------- trunk/OpenMPT/mptrack/Modedit.cpp trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/mptrack/Modedit.cpp =================================================================== --- trunk/OpenMPT/mptrack/Modedit.cpp 2010-04-25 20:42:36 UTC (rev 577) +++ trunk/OpenMPT/mptrack/Modedit.cpp 2010-04-27 21:14:59 UTC (rev 578) @@ -171,8 +171,13 @@ MODCOMMAND *m = m_SndFile.Patterns[nPat]; // This is used for -> MOD/XM conversion - BYTE cEffectMemory[MAX_BASECHANNELS][MAX_EFFECTS]; - memset(&cEffectMemory, 0, sizeof(BYTE) * MAX_BASECHANNELS * MAX_EFFECTS); + vector<vector<MODCOMMAND::PARAM> > cEffectMemory; + cEffectMemory.resize(m_SndFile.GetNumChannels()); + for(size_t i = 0; i < m_SndFile.GetNumChannels(); i++) + { + cEffectMemory[i].resize(MAX_EFFECTS, 0); + } + UINT nChannel = m_SndFile.m_nChannels - 1; for (UINT len = m_SndFile.PatternSize[nPat] * m_SndFile.m_nChannels; len; m++, len--) @@ -187,11 +192,13 @@ switch(m->command) { case CMD_ARPEGGIO: + case CMD_S3MCMDEX: + case CMD_MODCMDEX: // No effect memory in XM / MOD if(m->param == 0) - m->param = cEffectMemory[nChannel][CMD_ARPEGGIO]; + m->param = cEffectMemory[nChannel][m->command]; else - cEffectMemory[nChannel][CMD_ARPEGGIO] = m->param; + cEffectMemory[nChannel][m->command] = m->param; break; } } Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp =================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp 2010-04-25 20:42:36 UTC (rev 577) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp 2010-04-27 21:14:59 UTC (rev 578) @@ -2877,7 +2877,7 @@ { // EFx implementation for MOD files (PT 1.1A and up: Invert Loop) // This effect trashes samples. Thanks to 8bitbubsy for making this work. :) - if((GetType() == MOD_TYPE_MOD) == 0 || pChn->nEFxSpeed == 0) return; + if(GetType() != MOD_TYPE_MOD || pChn->nEFxSpeed == 0) return; // we obviously also need a sample for this MODSAMPLE *pModSample = pChn->pModSample; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |