|
From: <sag...@us...> - 2010-02-05 20:39:21
|
Revision: 483
http://modplug.svn.sourceforge.net/modplug/?rev=483&view=rev
Author: saga-games
Date: 2010-02-05 20:39:08 +0000 (Fri, 05 Feb 2010)
Log Message:
-----------
[Fix] ITP Loader: Instruments flags in ITP files with embedded instrument headers were loaded wrong since revision 415. Still have to come up with a solution for the same problem with ITI and XI files.
Revision Links:
--------------
http://modplug.svn.sourceforge.net/modplug/?rev=415&view=rev
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_it.cpp
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2010-02-05 18:17:51 UTC (rev 482)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2010-02-05 20:39:08 UTC (rev 483)
@@ -827,21 +827,45 @@
i = 1;
// parse file
- while( uintptr_t(ptr - lpStream) <= dwMemLength - 4 && i <= m_nInstruments ){
+ while( uintptr_t(ptr - lpStream) <= dwMemLength - 4 && i <= m_nInstruments )
+ {
fcode = (*((__int32 *)ptr)); // read field code
- switch( fcode ){
+ switch( fcode )
+ {
case 'MPTS': goto mpts; //:) // reached end of instrument headers
case 'SEP@': case 'MPTX':
ptr += sizeof(__int32); // jump code
i++; // switch to next instrument
- break;
+ break;
default:
ptr += sizeof(__int32); // jump field code
ReadExtendedInstrumentProperty(Instruments[i], fcode, ptr, lpStream + dwMemLength);
- break;
+ // 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;
+ }
+ break;
}
}
}
@@ -1547,7 +1571,7 @@
DWORD id = 0x2e697470; // .itp ASCII
fwrite(&id, 1, sizeof(id), f);
- id = 0x00000101; // v1.01
+ id = 0x00000102; // v1.02
fwrite(&id, 1, sizeof(id), f);
// Song name
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|