even more fixes
This commit is contained in:
parent
226f43fea3
commit
e158591ccb
|
@ -145,7 +145,9 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
|
|||
ds.loopModality=0;
|
||||
ds.properNoiseLayout=false;
|
||||
ds.waveDutyIsVol=false;
|
||||
ds.resetMacroOnPorta=true;
|
||||
// TODO: WHAT?! geodude.dmf fails when this is true
|
||||
// but isn't that how Defle behaves???
|
||||
ds.resetMacroOnPorta=false;
|
||||
ds.legacyVolumeSlides=true;
|
||||
ds.compatibleArpeggio=true;
|
||||
ds.noteOffResetsSlides=true;
|
||||
|
@ -512,7 +514,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
|
|||
for (int j=0; j<ins->std.arpMacro.len; j++) {
|
||||
ins->std.arpMacro.val[j]^=0x40000000;
|
||||
}
|
||||
if (ins->std.arpMacro.loop>=ins->std.arpMacro.len && ins->std.arpMacro.len<255) {
|
||||
if (ins->std.arpMacro.loop==255 && ins->std.arpMacro.len<255) {
|
||||
ins->std.arpMacro.val[ins->std.arpMacro.len++]=0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1349,7 +1349,7 @@ DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) {
|
|||
for (int i=0; i<std.arpMacro.len; i++) {
|
||||
std.arpMacro.val[i]^=0x40000000;
|
||||
}
|
||||
if ((std.arpMacro.loop>=std.arpMacro.len || std.arpMacro.rel>std.arpMacro.loop) && std.arpMacro.len<255) {
|
||||
if ((std.arpMacro.loop>=std.arpMacro.len || (std.arpMacro.rel>std.arpMacro.loop && std.arpMacro.rel<std.arpMacro.len)) && std.arpMacro.len<255) {
|
||||
std.arpMacro.val[std.arpMacro.len++]=0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -219,12 +219,8 @@ void DivPlatformSMS::tick(bool sysTick) {
|
|||
} else { // 3 fixed values
|
||||
unsigned char value;
|
||||
if (chan[3].std.arp.had) {
|
||||
if (chan[3].std.arp.mode) {
|
||||
value=chan[3].std.arp.val%12;
|
||||
} else {
|
||||
value=(chan[3].note+chan[3].std.arp.val)%12;
|
||||
}
|
||||
} else {
|
||||
value=parent->calcArp(chan[3].note,chan[3].std.arp.val)%12;
|
||||
} else { // pardon?
|
||||
value=chan[3].note%12;
|
||||
}
|
||||
if (value<3) {
|
||||
|
|
|
@ -92,7 +92,7 @@ void DivPlatformTIA::tick(bool sysTick) {
|
|||
if (!chan[i].inPorta) {
|
||||
if (chan[i].std.arp.val<0 && (!(chan[i].std.arp.val&0x40000000))) {
|
||||
chan[i].baseFreq=0x80000000|(chan[i].std.arp.val|0x40000000);
|
||||
} else if (chan[i].std.arp.val&0x40000000) {
|
||||
} else if (chan[i].std.arp.val>=0 && chan[i].std.arp.val&0x40000000) {
|
||||
chan[i].baseFreq=0x80000000|(chan[i].std.arp.val&(~0x40000000));
|
||||
} else {
|
||||
chan[i].baseFreq=(chan[i].note+chan[i].std.arp.val)<<8;
|
||||
|
|
Loading…
Reference in a new issue