diff src/modplug/load_dbm.cxx @ 2216:3673c7ec4ea2

Sync with schism's modplug engine. Suggested by G?rkan Seng?n.
author William Pitcock <nenolod@atheme.org>
date Fri, 07 Dec 2007 12:08:47 -0600
parents 6b5a52635b3b
children 6907fc39b53f
line wrap: on
line diff
--- a/src/modplug/load_dbm.cxx	Thu Nov 29 04:17:51 2007 +0300
+++ b/src/modplug/load_dbm.cxx	Fri Dec 07 12:08:47 2007 -0600
@@ -158,7 +158,7 @@
 				}
 				Headers[iIns+1] = penv;
 				penv->nFadeOut = 1024;	// ???
-				penv->nGlobalVol = 64;
+				penv->nGlobalVol = 128;
 				penv->nPan = bswapBE16(pih->panning);
 				if ((penv->nPan) && (penv->nPan < 256))
 					penv->dwFlags = ENV_SETPANNING;
@@ -193,6 +193,7 @@
 				chunk_pos += sizeof(DBMINSTRUMENT);
 				m_nInstruments = iIns+1;
 			}
+			m_dwSongFlags |= SONG_INSTRUMENTMODE;
 		} else
 		// Volume Envelopes
 		if (chunk_id == DBM_ID_VENV)
@@ -215,15 +216,15 @@
 					if (peh->flags & 1) penv->dwFlags |= ENV_VOLUME;
 					if (peh->flags & 2) penv->dwFlags |= ENV_VOLSUSTAIN;
 					if (peh->flags & 4) penv->dwFlags |= ENV_VOLLOOP;
-					penv->nVolEnv = peh->numpoints + 1;
-					if (penv->nVolEnv > MAX_ENVPOINTS) penv->nVolEnv = MAX_ENVPOINTS;
-					penv->nVolLoopStart = peh->loopbegin;
-					penv->nVolLoopEnd = peh->loopend;
-					penv->nVolSustainBegin = penv->nVolSustainEnd = peh->sustain1;
-					for (UINT i=0; i<penv->nVolEnv; i++)
+					penv->VolEnv.nNodes = peh->numpoints + 1;
+					if (penv->VolEnv.nNodes > MAX_ENVPOINTS) penv->VolEnv.nNodes = MAX_ENVPOINTS;
+					penv->VolEnv.nLoopStart = peh->loopbegin;
+					penv->VolEnv.nLoopEnd = peh->loopend;
+					penv->VolEnv.nSustainStart = penv->VolEnv.nSustainEnd = peh->sustain1;
+					for (int i=0; i<penv->VolEnv.nNodes; i++)
 					{
-						penv->VolPoints[i] = bswapBE16(peh->volenv[i*2]);
-						penv->VolEnv[i] = (BYTE)bswapBE16(peh->volenv[i*2+1]);
+						penv->VolEnv.Ticks[i] = bswapBE16(peh->volenv[i*2]);
+						penv->VolEnv.Values[i] = (BYTE)bswapBE16(peh->volenv[i*2+1]);
 					}
 				}
 				chunk_pos += sizeof(DBMENVELOPE);
@@ -254,6 +255,7 @@
 						UINT i = 0;
 
 						PatternSize[iPat] = nRows;
+						PatternAllocSize[iPat] = nRows;
 						Patterns[iPat] = m;
 						while ((i+3<pksize) && (row < nRows))
 						{