|
From: <sag...@us...> - 2010-10-04 17:44:33
|
Revision: 733
http://modplug.svn.sourceforge.net/modplug/?rev=733&view=rev
Author: saga-games
Date: 2010-10-04 17:44:27 +0000 (Mon, 04 Oct 2010)
Log Message:
-----------
[Mod] S3M Loader: Changed some code that should only affect really broken S3M files which every player handles different anyway (at least my broken version of aa-polym.s3m sounds better now)
[Fix] Mod Conversion: E9x is now converted to Q0x, not Q8x.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/Load_s3m.cpp
trunk/OpenMPT/soundlib/modcommand.cpp
Modified: trunk/OpenMPT/soundlib/Load_s3m.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_s3m.cpp 2010-10-03 21:22:48 UTC (rev 732)
+++ trunk/OpenMPT/soundlib/Load_s3m.cpp 2010-10-04 17:44:27 UTC (rev 733)
@@ -377,9 +377,7 @@
if (c5Speed < 1024) c5Speed = 1024;
Samples[iSmp].nC5Speed = c5Speed;
- insfile[iSmp] = ((DWORD)LittleEndianW(*((LPWORD)(s+0x0E)))) << 4;
- insfile[iSmp] += ((DWORD)(BYTE)s[0x0D]) << 20;
- if (insfile[iSmp] > dwMemLength) insfile[iSmp] &= 0xFFFF; // wtf? whose idea was this?
+ insfile[iSmp - 1] = (s[0x0E] << 4) | (s[0x0F] << 12) | (s[0x0D] << 20);
if(Samples[iSmp].nLoopEnd < 2)
Samples[iSmp].nLoopStart = Samples[iSmp].nLoopEnd = 0;
@@ -499,23 +497,29 @@
}
// Reading samples
- for (UINT iRaw = 1; iRaw <= insnum; iRaw++) if ((Samples[iRaw].nLength) && (insfile[iRaw]))
+ for (UINT iRaw = 1; iRaw <= insnum; iRaw++) if ((Samples[iRaw].nLength) && (insfile[iRaw - 1]))
{
UINT flags = (psfh.version == 1) ? RS_PCM8S : RS_PCM8U;
if (insflags[iRaw-1] & 4) flags += 5;
if (insflags[iRaw-1] & 2) flags |= RSF_STEREO;
if (inspack[iRaw-1] == 4) flags = RS_ADPCM4;
- dwMemPos = insfile[iRaw];
- dwMemPos += ReadSample(&Samples[iRaw], flags, (LPSTR)(lpStream + dwMemPos), dwMemLength - dwMemPos);
+ if(insfile[iRaw - 1] < dwMemLength)
+ {
+ dwMemPos = insfile[iRaw - 1];
+ }
+ if(dwMemPos < dwMemLength)
+ {
+ dwMemPos += ReadSample(&Samples[iRaw], flags, (LPSTR)(lpStream + dwMemPos), dwMemLength - dwMemPos);
+ }
}
m_nMinPeriod = 64;
m_nMaxPeriod = 32767;
if (psfh.flags & 0x10) m_dwSongFlags |= SONG_AMIGALIMITS;
#ifdef MODPLUG_TRACKER
- if(bHasAdlibPatches && m_pModDoc != nullptr)
+ if(bHasAdlibPatches && GetpModDoc() != nullptr)
{
- m_pModDoc->AddToLog("This track uses Adlib instruments, which are not supported by OpenMPT.");
+ GetpModDoc()->AddToLog("This track uses Adlib instruments, which are not supported by OpenMPT.");
}
#endif // MODPLUG_TRACKER
Modified: trunk/OpenMPT/soundlib/modcommand.cpp
===================================================================
--- trunk/OpenMPT/soundlib/modcommand.cpp 2010-10-03 21:22:48 UTC (rev 732)
+++ trunk/OpenMPT/soundlib/modcommand.cpp 2010-10-04 17:44:27 UTC (rev 733)
@@ -27,7 +27,7 @@
case 0x50: m->param = (m->param & 0x0F) | 0x20; break;
case 0x60: m->param = (m->param & 0x0F) | 0xB0; break;
case 0x70: m->param = (m->param & 0x03) | 0x40; break;
- case 0x90: m->command = CMD_RETRIG; m->param = 0x80 | (m->param & 0x0F); break;
+ case 0x90: m->command = CMD_RETRIG; m->param = (m->param & 0x0F); break;
case 0xA0: if (m->param & 0x0F) { m->command = CMD_VOLUMESLIDE; m->param = (m->param << 4) | 0x0F; } else m->command = 0; break;
case 0xB0: if (m->param & 0x0F) { m->command = CMD_VOLUMESLIDE; m->param |= 0xF0; } else m->command = 0; break;
case 0xC0: if (m->param == 0xC0) { m->command = CMD_NONE; m->note = NOTE_NOTECUT; } // this does different things in IT and ST3
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|