comparison src/modplug/load_med.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
comparison
equal deleted inserted replaced
2198:32f9f1e4a9ec 2216:3673c7ec4ea2
570 #endif 570 #endif
571 wNumBlocks = bswapBE16(pmsh->numblocks); 571 wNumBlocks = bswapBE16(pmsh->numblocks);
572 m_nChannels = 4; 572 m_nChannels = 4;
573 m_nSamples = pmsh->numsamples; 573 m_nSamples = pmsh->numsamples;
574 if (m_nSamples > 63) m_nSamples = 63; 574 if (m_nSamples > 63) m_nSamples = 63;
575 m_nStereoSeparation = ((pmsh2->mix_stereosep < 0) ? -32 : 32) * pmsh2->mix_stereosep;
575 // Tempo 576 // Tempo
576 m_nDefaultTempo = 125; 577 m_nDefaultTempo = 125;
577 deftempo = bswapBE16(pmsh->deftempo); 578 deftempo = bswapBE16(pmsh->deftempo);
578 if (!deftempo) deftempo = 125; 579 if (!deftempo) deftempo = 125;
579 if (pmsh->flags2 & MMD_FLAG2_BPM) 580 if (pmsh->flags2 & MMD_FLAG2_BPM)
809 lines = pmb->lines + 1; 810 lines = pmb->lines + 1;
810 tracks = pmb->numtracks; 811 tracks = pmb->numtracks;
811 if (!tracks) tracks = m_nChannels; 812 if (!tracks) tracks = m_nChannels;
812 if ((Patterns[iBlk] = AllocatePattern(lines, m_nChannels)) == NULL) continue; 813 if ((Patterns[iBlk] = AllocatePattern(lines, m_nChannels)) == NULL) continue;
813 PatternSize[iBlk] = lines; 814 PatternSize[iBlk] = lines;
815 PatternAllocSize[iBlk] = lines;
814 MODCOMMAND *p = Patterns[iBlk]; 816 MODCOMMAND *p = Patterns[iBlk];
815 LPBYTE s = (LPBYTE)(lpStream + dwPos + 2); 817 LPBYTE s = (LPBYTE)(lpStream + dwPos + 2);
816 UINT maxlen = tracks*lines*3; 818 UINT maxlen = tracks*lines*3;
817 if (maxlen + dwPos > dwMemLength - 2) break; 819 if (maxlen + dwPos > dwMemLength - 2) break;
818 for (UINT y=0; y<lines; y++) 820 for (UINT y=0; y<lines; y++)
845 lines = (pmb->lines >> 8) + 1; 847 lines = (pmb->lines >> 8) + 1;
846 tracks = pmb->numtracks >> 8; 848 tracks = pmb->numtracks >> 8;
847 if (!tracks) tracks = m_nChannels; 849 if (!tracks) tracks = m_nChannels;
848 if ((Patterns[iBlk] = AllocatePattern(lines, m_nChannels)) == NULL) continue; 850 if ((Patterns[iBlk] = AllocatePattern(lines, m_nChannels)) == NULL) continue;
849 PatternSize[iBlk] = (WORD)lines; 851 PatternSize[iBlk] = (WORD)lines;
852 PatternAllocSize[iBlk] = (WORD)lines;
850 DWORD dwBlockInfo = bswapBE32(pmb->info); 853 DWORD dwBlockInfo = bswapBE32(pmb->info);
851 if ((dwBlockInfo) && (dwBlockInfo < dwMemLength - sizeof(MMD1BLOCKINFO))) 854 if ((dwBlockInfo) && (dwBlockInfo < dwMemLength - sizeof(MMD1BLOCKINFO)))
852 { 855 {
853 pbi = (MMD1BLOCKINFO *)(lpStream + dwBlockInfo); 856 pbi = (MMD1BLOCKINFO *)(lpStream + dwBlockInfo);
854 #ifdef MED_LOG 857 #ifdef MED_LOG