|
From: <sag...@us...> - 2013-09-03 16:04:15
|
Revision: 2630
http://sourceforge.net/p/modplug/code/2630
Author: saga-games
Date: 2013-09-03 16:04:06 +0000 (Tue, 03 Sep 2013)
Log Message:
-----------
[Fix] IT Loader: Fixed detection MPT 1.0 alpha.
[Imp] XM Loader: Don't enable smooth ramping heuristic for old XM revisions (this feature was introduced in a later version of FT2)
[Imp] MOD Loader: When loading SoundTracker modules, automatically enable ProTracker 1.x mode.
[Ref] Various smaller changes.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_it.cpp
trunk/OpenMPT/soundlib/Load_mod.cpp
trunk/OpenMPT/soundlib/Load_ptm.cpp
trunk/OpenMPT/soundlib/Load_s3m.cpp
trunk/OpenMPT/soundlib/Load_stm.cpp
trunk/OpenMPT/soundlib/Load_umx.cpp
trunk/OpenMPT/soundlib/Load_xm.cpp
trunk/OpenMPT/soundlib/MIDIEvents.h
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2013-09-03 15:23:51 UTC (rev 2629)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2013-09-03 16:04:06 UTC (rev 2630)
@@ -396,13 +396,6 @@
madeWithTracker = "ModPlug tracker b3.3 - 1.09";
interpretModPlugMade = true;
}
- else if(fileHeader.cwtv == 0x0214 && fileHeader.cmwt == 0x0200 && fileHeader.reserved == 0)
- {
- // ModPlug Tracker 1.00a5, instruments 560 bytes apart
- m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 00, 00, A5);
- madeWithTracker = "ModPlug tracker 1.00a5";
- interpretModPlugMade = true;
- }
} else // case: type == MOD_TYPE_MPT
{
if (fileHeader.cwtv >= verMptFileVerLoadLimit)
@@ -959,6 +952,12 @@
&& fileHeader.msglength == 0 && fileHeader.msgoffset == 0 && fileHeader.reserved == 0)
{
madeWithTracker = "OpenSPC conversion";
+ } else if(fileHeader.cwtv == 0x0214 && fileHeader.cmwt == 0x0200 && fileHeader.reserved == 0)
+ {
+ // ModPlug Tracker 1.00a5, instruments 560 bytes apart
+ m_dwLastSavedWithVersion = MAKE_VERSION_NUMERIC(1, 00, 00, A5);
+ madeWithTracker = "ModPlug tracker 1.00a5";
+ interpretModPlugMade = true;
} else if(fileHeader.cwtv == 0x0214 && fileHeader.cmwt == 0x0214 && fileHeader.reserved == ITFileHeader::chibiMagic)
{
madeWithTracker = "ChibiTracker";
@@ -1401,7 +1400,7 @@
dwPos += 8;
const CHANNELINDEX maxChannels = MIN(specs.channelsMax, GetNumChannels());
- std::vector<BYTE> chnmask(maxChannels, 0xFF);
+ std::vector<uint8> chnmask(maxChannels, 0xFF);
std::vector<ModCommand> lastvalue(maxChannels, ModCommand::Empty());
for(ROWINDEX row = 0; row < writeRows; row++)
@@ -1566,7 +1565,8 @@
#else
bool compress = false;
#endif // MODPLUG_TRACKER
- // Old MPT will only consider the IT2.15 compression flag if the header version also indicates IT2.15.
+ // Old MPT, DUMB and probably other libraries will only consider the IT2.15 compression flag if the header version also indicates IT2.15.
+ // Old MilkyTracker will only assume IT2.15 compression with cmwt == 0x215, ignoring the delta flag completely.
itss.ConvertToIT(Samples[nsmp], GetType(), compress, itHeader.cmwt >= 0x215);
mpt::String::Write<mpt::String::nullTerminated>(itss.name, m_szNames[nsmp]);
@@ -1816,13 +1816,13 @@
mpt::String::SetNullTerminator(m_MixPlugins[plug].Info.szLibraryName);
//data for VST setchunk? size lies just after standard plugin data.
- FileReader pluginDataChunk = chunk.GetChunk(chunk.ReadUint32LE());
- uint32 pluginDataChunkSize = mpt::saturate_cast<uint32>(pluginDataChunk.BytesLeft());
+ const uint32 pluginDataChunkSize = chunk.ReadUint32LE();
+ FileReader pluginDataChunk = chunk.GetChunk(pluginDataChunkSize);
if(pluginDataChunk.IsValid())
{
m_MixPlugins[plug].nPluginDataSize = 0;
- m_MixPlugins[plug].pPluginData = new char [pluginDataChunkSize];
+ m_MixPlugins[plug].pPluginData = new (std::nothrow) char[pluginDataChunkSize];
if(m_MixPlugins[plug].pPluginData)
{
m_MixPlugins[plug].nPluginDataSize = pluginDataChunkSize;
Modified: trunk/OpenMPT/soundlib/Load_mod.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_mod.cpp 2013-09-03 15:23:51 UTC (rev 2629)
+++ trunk/OpenMPT/soundlib/Load_mod.cpp 2013-09-03 16:04:06 UTC (rev 2630)
@@ -889,7 +889,7 @@
m_nMinPeriod = 14 * 4;
m_nMaxPeriod = 3424 * 4;
m_nSamplePreAmp = 64;
- m_SongFlags.reset();
+ m_SongFlags = SONG_PT1XMODE;
mpt::String::Read<mpt::String::spacePadded>(songName, songname);
// Setup channel pan positions and volume
Modified: trunk/OpenMPT/soundlib/Load_ptm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_ptm.cpp 2013-09-03 15:23:51 UTC (rev 2629)
+++ trunk/OpenMPT/soundlib/Load_ptm.cpp 2013-09-03 16:04:06 UTC (rev 2630)
@@ -27,7 +27,7 @@
uint16 numSamples; // Number of instruments (1..255)
uint16 numPatterns; // Number of patterns (1..128)
uint16 numChannels; // Number of channels (voices) used (1..32)
- uint8 flags[2]; // Set to 0
+ uint16 flags; // Set to 0
uint8 reserved2[2]; // Reserved, set to 0
char magic[4]; // Song identification, 'PTMF'
uint8 reserved3[16]; // Reserved, set to 0
@@ -42,6 +42,7 @@
SwapBytesLE(numSamples);
SwapBytesLE(numPatterns);
SwapBytesLE(numChannels);
+ SwapBytesLE(flags);
for(std::size_t i = 0; i < CountOf(patOffsets); i++)
{
SwapBytesLE(patOffsets[i]);
@@ -141,6 +142,9 @@
PTMFileHeader fileHeader;
if(!file.ReadConvertEndianness(fileHeader)
|| memcmp(fileHeader.magic, "PTMF", 4)
+ || fileHeader.dosEOF != 26
+ || fileHeader.versionHi > 2
+ || fileHeader.flags != 0
|| !fileHeader.numChannels
|| fileHeader.numChannels > 32
|| !fileHeader.numOrders || fileHeader.numOrders > 256
Modified: trunk/OpenMPT/soundlib/Load_s3m.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_s3m.cpp 2013-09-03 15:23:51 UTC (rev 2629)
+++ trunk/OpenMPT/soundlib/Load_s3m.cpp 2013-09-03 16:04:06 UTC (rev 2630)
@@ -18,7 +18,7 @@
void CSoundFile::S3MConvert(ModCommand &m, bool fromIT) const
-//--------------------------------------------------------
+//-----------------------------------------------------------
{
switch(m.command | 0x40)
{
@@ -876,9 +876,9 @@
size_t writtenLength = sampleHeader[smp].GetSampleFormat(false).WriteSample(f, Samples[realSmp], smpLength);
sampleDataOffset += writtenLength;
- if((writtenLength % 16) != 0)
+ if((writtenLength % 16u) != 0)
{
- size_t fillSize = 16 - (writtenLength % 16);
+ size_t fillSize = 16 - (writtenLength % 16u);
fwrite(filler, fillSize, 1, f);
sampleDataOffset += fillSize;
}
Modified: trunk/OpenMPT/soundlib/Load_stm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_stm.cpp 2013-09-03 15:23:51 UTC (rev 2629)
+++ trunk/OpenMPT/soundlib/Load_stm.cpp 2013-09-03 16:04:06 UTC (rev 2630)
@@ -27,7 +27,7 @@
char filename[12]; // Can't have long comments - just filename comments :)
uint8 zero;
uint8 disk; // A blast from the past
- uint16 offset; // ISA in memory when in ST 2
+ uint8 offset[2]; // ISA in memory when in ST 2
uint16 length; // Sample length
uint16 loopStart; // Loop start point
uint16 loopEnd; // Loop end point
@@ -43,7 +43,7 @@
mpt::String::Read<mpt::String::nullTerminated>(mptSmp.filename, filename);
mptSmp.nC5Speed = sampleRate;
- mptSmp.nVolume = std::min(volume * 4u, 256u);
+ mptSmp.nVolume = std::min<uint8>(volume, 64) * 4;
mptSmp.nLength = length;
mptSmp.nLoopStart = loopStart;
mptSmp.nLoopEnd = loopEnd;
@@ -230,16 +230,6 @@
switch(m->command)
{
-#ifdef MODPLUG_TRACKER
- case CMD_SPEED:
- // ST2 assumes that the tempo is 125 * 16 BPM, and effects are updated
- // on every 16th tick of a row. This is pretty hard to handle in the tracker,
- // so we just assume the tempo is 125 and divide the speed by 16 instead.
- // Parameters below 10 might behave weird.
- m->param >>= 4;
- break;
-#endif // MODPLUG_TRACKER
-
case CMD_PATTERNBREAK:
m->param = (m->param & 0xF0) * 10 + (m->param & 0x0F);
if(breakRow > m->param)
@@ -267,12 +257,23 @@
// broken... oh well. not a big loss.
break;
+#ifdef MODPLUG_TRACKER
+ case CMD_SPEED:
+ // ST2 assumes that the tempo is 125 * 16 BPM (or in other words: ticks are
+ // 16 times as precise as in ProTracker), and effects are updated on every
+ // 16th tick of a row. This is pretty hard to handle in the tracker when not
+ // natively supporting STM editing, so we just assume the tempo is 125 and
+ // divide the speed by 16 instead. Parameters below 10 might behave weird.
+ m->param >>= 4;
+#endif // MODPLUG_TRACKER
+
+ // Intentonal fall-through
default:
// Anything not listed above is a no-op if there's no value.
// (ST2 doesn't have effect memory)
if(!m->param)
{
- m->command= CMD_NONE;
+ m->command = CMD_NONE;
}
break;
}
Modified: trunk/OpenMPT/soundlib/Load_umx.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_umx.cpp 2013-09-03 15:23:51 UTC (rev 2629)
+++ trunk/OpenMPT/soundlib/Load_umx.cpp 2013-09-03 16:04:06 UTC (rev 2630)
@@ -204,6 +204,7 @@
// Now we can be pretty sure that we're doing the right thing.
InitializeGlobals();
+ madeWithTracker = mpt::String::Format("Unreal Package v%u", fileHeader.packageVersion);
for(uint32 i = 0; i < fileHeader.exportCount; i++)
{
Modified: trunk/OpenMPT/soundlib/Load_xm.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_xm.cpp 2013-09-03 15:23:51 UTC (rev 2629)
+++ trunk/OpenMPT/soundlib/Load_xm.cpp 2013-09-03 16:04:06 UTC (rev 2630)
@@ -583,6 +583,7 @@
}
if(madeWith[verFT2Generic]
+ && fileHeader.version < 0x0104 // Old versions of FT2 didn't have (smooth) ramping. Disable it for those versions where we can be sure that there should be no ramping.
#ifdef MODPLUG_TRACKER
&& TrackerSettings::Instance().autoApplySmoothFT2Ramping
#endif // MODPLUG_TRACKER
@@ -719,7 +720,7 @@
fileHeader.flags = fileHeader.flags;
// Fasttracker 2 will happily accept any tempo faster than 255 BPM. XMPlay does also support this, great!
- fileHeader.tempo = static_cast<uint16>(Clamp(m_nDefaultTempo, 32u, 512u));
+ fileHeader.tempo = static_cast<uint16>(m_nDefaultTempo);
fileHeader.speed = static_cast<uint16>(Clamp(m_nDefaultSpeed, 1u, 31u));
fileHeader.ConvertEndianness();
Modified: trunk/OpenMPT/soundlib/MIDIEvents.h
===================================================================
--- trunk/OpenMPT/soundlib/MIDIEvents.h 2013-09-03 15:23:51 UTC (rev 2629)
+++ trunk/OpenMPT/soundlib/MIDIEvents.h 2013-09-03 16:04:06 UTC (rev 2630)
@@ -108,7 +108,7 @@
MIDICC_GeneralPurposeButton3_OnOff = 82,
MIDICC_GeneralPurposeButton4_OnOff = 83,
MIDICC_EffectsLevel = 91,
- MIDICC_TremuloLevel = 92,
+ MIDICC_TremoloLevel = 92,
MIDICC_ChorusLevel = 93,
MIDICC_CelesteLevel = 94,
MIDICC_PhaserLevel = 95,
@@ -224,7 +224,7 @@
"", //89
"", //90
"EffectsLevel", //91
- "TremuloLevel", //92
+ "TremoloLevel", //92
"ChorusLevel", //93
"CelesteLevel", //94
"PhaserLevel", //95
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|