From: <sag...@us...> - 2010-02-07 13:23:41
|
Revision: 485 http://modplug.svn.sourceforge.net/modplug/?rev=485&view=rev Author: saga-games Date: 2010-02-07 13:23:29 +0000 (Sun, 07 Feb 2010) Log Message: ----------- [Fix] Pattern Editor: The status bar ("Position x of y") only the showed order length for the first subtune if subtunes were separated by an "---" order item. [Fix] Instrument IO: Flags from old ITI/XI files should also be loaded correctly now. Modified Paths: -------------- trunk/OpenMPT/mptrack/Ctrl_seq.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Sampleio.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/mptrack/Ctrl_seq.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2010-02-06 17:43:04 UTC (rev 484) +++ trunk/OpenMPT/mptrack/Ctrl_seq.cpp 2010-02-07 13:23:29 UTC (rev 485) @@ -702,7 +702,7 @@ } else { - const ORDERINDEX nLength = pSndFile->Order.GetLengthFirstEmpty(); + const ORDERINDEX nLength = pSndFile->Order.GetLengthTailTrimmed(); wsprintf(s, "Position %d of %d (%02Xh of %02Xh)", m_nScrollPos, nLength, m_nScrollPos, nLength); } Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2010-02-06 17:43:04 UTC (rev 484) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2010-02-07 13:23:29 UTC (rev 485) @@ -846,24 +846,7 @@ // fix old instrument flags which got broken in OpenMPT 1.17.03.03 due to refactoring (rev 415). if(version == 0x00000101 && fcode == 'dF..') { - DWORD dwFlags = Instruments[i]->dwFlags; // more convenient - DWORD dwNewFlags = 0; - if(dwFlags & 0x0001) Instruments[i]->VolEnv.dwFlags |= ENV_ENABLED; - if(dwFlags & 0x0002) Instruments[i]->VolEnv.dwFlags |= ENV_SUSTAIN; - if(dwFlags & 0x0004) Instruments[i]->VolEnv.dwFlags |= ENV_LOOP; - if(dwFlags & 0x0008) Instruments[i]->PanEnv.dwFlags |= ENV_ENABLED; - if(dwFlags & 0x0010) Instruments[i]->PanEnv.dwFlags |= ENV_SUSTAIN; - if(dwFlags & 0x0020) Instruments[i]->PanEnv.dwFlags |= ENV_LOOP; - if(dwFlags & 0x0040) Instruments[i]->PitchEnv.dwFlags |= ENV_ENABLED; - if(dwFlags & 0x0080) Instruments[i]->PitchEnv.dwFlags |= ENV_SUSTAIN; - if(dwFlags & 0x0100) Instruments[i]->VolEnv.dwFlags |= ENV_LOOP; - if(dwFlags & 0x0200) dwNewFlags |= INS_SETPANNING; - if(dwFlags & 0x0400) Instruments[i]->PitchEnv.dwFlags |= ENV_FILTER; - if(dwFlags & 0x0800) Instruments[i]->VolEnv.dwFlags |= ENV_CARRY; - if(dwFlags & 0x1000) Instruments[i]->PanEnv.dwFlags |= ENV_CARRY; - if(dwFlags & 0x2000) Instruments[i]->PitchEnv.dwFlags |= ENV_CARRY; - if(dwFlags & 0x4000) dwNewFlags |= INS_MUTE; - Instruments[i]->dwFlags = dwNewFlags; + ConvertOldExtendedFlagFormat(Instruments[i]); } break; } Modified: trunk/OpenMPT/soundlib/Sampleio.cpp =================================================================== --- trunk/OpenMPT/soundlib/Sampleio.cpp 2010-02-06 17:43:04 UTC (rev 484) +++ trunk/OpenMPT/soundlib/Sampleio.cpp 2010-02-07 13:23:29 UTC (rev 485) @@ -2056,6 +2056,8 @@ // Seek for supported extended settings header if( code == 'MPTX' ) { + bool newFormat = false; // new flag format (separate flags for envelopes) + bool hasFlags = false; // do we really need to convert the flags? pData += sizeof(code); // jump extension header code while( (uintptr_t)(pData - pDataStart) <= nMemLength - 4) @@ -2063,11 +2065,42 @@ memcpy(&code, pData, sizeof(code)); // read field code pData += sizeof(code); // jump field code ReadExtendedInstrumentProperty(pIns, code, pData, pEnd); + if(code == 'VFLG') + newFormat = true; + if(code == 'dF..') + hasFlags = true; } + if(!newFormat && hasFlags) + { + ConvertOldExtendedFlagFormat(pIns); + } } } +void ConvertOldExtendedFlagFormat(MODINSTRUMENT *pIns) +//---------------------------------------------------- +{ + DWORD dwOldFlags = pIns->dwFlags; + pIns->dwFlags = pIns->VolEnv.dwFlags = pIns->PanEnv.dwFlags = pIns->PitchEnv.dwFlags = 0; + if(dwOldFlags & 0x0001) pIns->VolEnv.dwFlags |= ENV_ENABLED; + if(dwOldFlags & 0x0002) pIns->VolEnv.dwFlags |= ENV_SUSTAIN; + if(dwOldFlags & 0x0004) pIns->VolEnv.dwFlags |= ENV_LOOP; + if(dwOldFlags & 0x0008) pIns->PanEnv.dwFlags |= ENV_ENABLED; + if(dwOldFlags & 0x0010) pIns->PanEnv.dwFlags |= ENV_SUSTAIN; + if(dwOldFlags & 0x0020) pIns->PanEnv.dwFlags |= ENV_LOOP; + if(dwOldFlags & 0x0040) pIns->PitchEnv.dwFlags |= ENV_ENABLED; + if(dwOldFlags & 0x0080) pIns->PitchEnv.dwFlags |= ENV_SUSTAIN; + if(dwOldFlags & 0x0100) pIns->VolEnv.dwFlags |= ENV_LOOP; + if(dwOldFlags & 0x0200) pIns->dwFlags |= INS_SETPANNING; + if(dwOldFlags & 0x0400) pIns->PitchEnv.dwFlags |= ENV_FILTER; + if(dwOldFlags & 0x0800) pIns->VolEnv.dwFlags |= ENV_CARRY; + if(dwOldFlags & 0x1000) pIns->PanEnv.dwFlags |= ENV_CARRY; + if(dwOldFlags & 0x2000) pIns->PitchEnv.dwFlags |= ENV_CARRY; + if(dwOldFlags & 0x4000) pIns->dwFlags |= INS_MUTE; +} + + /////////////////////////////////////////////////////////////////////////////////////////////////// // 8SVX Samples Modified: trunk/OpenMPT/soundlib/Sndfile.h =================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h 2010-02-06 17:43:04 UTC (rev 484) +++ trunk/OpenMPT/soundlib/Sndfile.h 2010-02-07 13:23:29 UTC (rev 485) @@ -1193,5 +1193,8 @@ // Read extended instrument properties from 'pDataStart' to instrument 'pIns'. void ReadExtendedInstrumentProperties(MODINSTRUMENT* pIns, const LPCBYTE pDataStart, const size_t nMemLength); +// Convert old instrument flag format, where all flags used to be stored in one single flag. Now, some flags are stored in envelope-specific flag fields. +void ConvertOldExtendedFlagFormat(MODINSTRUMENT* pIns); + #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |