S3M/XM/IT import: fix contiguous slide/porta
This commit is contained in:
parent
f68249f52b
commit
8d11b4a840
|
@ -1138,6 +1138,9 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
|
|||
portaStatus[chan]=portaVal;
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
if (portaType[chan]!=3) {
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
portaType[chan]=3;
|
||||
porting[chan]=true;
|
||||
} else if (vol[chan]>=203 && vol[chan]<=212) { // vibrato
|
||||
|
@ -1179,6 +1182,9 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
|
|||
portaStatus[chan]=effectVal[chan];
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
if (portaType[chan]!=2) {
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
portaType[chan]=2;
|
||||
porting[chan]=true;
|
||||
break;
|
||||
|
@ -1187,6 +1193,9 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
|
|||
portaStatus[chan]=effectVal[chan];
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
if (portaType[chan]!=1) {
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
portaType[chan]=1;
|
||||
porting[chan]=true;
|
||||
break;
|
||||
|
@ -1195,6 +1204,9 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
|
|||
portaStatus[chan]=effectVal[chan];
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
if (portaType[chan]!=3) {
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
portaType[chan]=3;
|
||||
porting[chan]=true;
|
||||
break;
|
||||
|
|
|
@ -913,6 +913,9 @@ bool DivEngine::loadS3M(unsigned char* file, size_t len) {
|
|||
if (hasNoteIns) {
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
if (portaType[chan]!=2) {
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
portaType[chan]=2;
|
||||
porting[chan]=true;
|
||||
break;
|
||||
|
@ -924,6 +927,9 @@ bool DivEngine::loadS3M(unsigned char* file, size_t len) {
|
|||
if (hasNoteIns) {
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
if (portaType[chan]!=1) {
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
portaType[chan]=1;
|
||||
porting[chan]=true;
|
||||
break;
|
||||
|
@ -935,6 +941,9 @@ bool DivEngine::loadS3M(unsigned char* file, size_t len) {
|
|||
if (hasNoteIns) {
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
if (portaType[chan]!=3) {
|
||||
portaStatusChanged[chan]=true;
|
||||
}
|
||||
portaType[chan]=3;
|
||||
porting[chan]=true;
|
||||
break;
|
||||
|
|
|
@ -660,6 +660,7 @@ bool DivEngine::loadXM(unsigned char* file, size_t len) {
|
|||
bool arpStatusChanged[128];
|
||||
bool arping[128];
|
||||
bool arpingOld[128];
|
||||
unsigned char lastNote[128];
|
||||
|
||||
bool mustCommitInitial=true;
|
||||
|
||||
|
@ -681,6 +682,7 @@ bool DivEngine::loadXM(unsigned char* file, size_t len) {
|
|||
memset(arpStatusChanged,0,128*sizeof(bool));
|
||||
memset(arping,0,128*sizeof(bool));
|
||||
memset(arpingOld,0,128*sizeof(bool));
|
||||
memset(lastNote,0,128);
|
||||
|
||||
logV("pattern %d",i);
|
||||
headerSeek=reader.tell();
|
||||
|
@ -753,6 +755,7 @@ bool DivEngine::loadXM(unsigned char* file, size_t len) {
|
|||
|
||||
if (hasNote) {
|
||||
if (note!=0) {
|
||||
lastNote[k]=note;
|
||||
if (note>96) {
|
||||
p->data[j][0]=101;
|
||||
p->data[j][1]=0;
|
||||
|
@ -771,8 +774,8 @@ bool DivEngine::loadXM(unsigned char* file, size_t len) {
|
|||
ins=reader.readC();
|
||||
p->data[j][2]=((int)ins)-1;
|
||||
// default volume
|
||||
if (hasNote && note<96 && ins>0) {
|
||||
p->data[j][3]=sampleVol[(ins-1)&255][noteMap[(ins-1)&255][note&127]];
|
||||
if (lastNote[k]<96 && ins>0) {
|
||||
p->data[j][3]=sampleVol[(ins-1)&255][noteMap[(ins-1)&255][lastNote[k]&127]];
|
||||
}
|
||||
writePanning=true;
|
||||
}
|
||||
|
@ -813,6 +816,9 @@ bool DivEngine::loadXM(unsigned char* file, size_t len) {
|
|||
portaStatus[k]=effectVal;
|
||||
portaStatusChanged[k]=true;
|
||||
}
|
||||
if (portaType[k]!=1) {
|
||||
portaStatusChanged[k]=true;
|
||||
}
|
||||
portaType[k]=1;
|
||||
porting[k]=true;
|
||||
break;
|
||||
|
@ -821,6 +827,9 @@ bool DivEngine::loadXM(unsigned char* file, size_t len) {
|
|||
portaStatus[k]=effectVal;
|
||||
portaStatusChanged[k]=true;
|
||||
}
|
||||
if (portaType[k]!=2) {
|
||||
portaStatusChanged[k]=true;
|
||||
}
|
||||
portaType[k]=2;
|
||||
porting[k]=true;
|
||||
break;
|
||||
|
@ -829,6 +838,9 @@ bool DivEngine::loadXM(unsigned char* file, size_t len) {
|
|||
portaStatus[k]=effectVal;
|
||||
portaStatusChanged[k]=true;
|
||||
}
|
||||
if (portaType[k]!=3) {
|
||||
portaStatusChanged[k]=true;
|
||||
}
|
||||
portaType[k]=3;
|
||||
porting[k]=true;
|
||||
break;
|
||||
|
@ -880,7 +892,7 @@ bool DivEngine::loadXM(unsigned char* file, size_t len) {
|
|||
volSlideStatus[k]=effectVal;
|
||||
volSlideStatusChanged[k]=true;
|
||||
}
|
||||
if (hasIns) {
|
||||
if (hasNote || hasIns) {
|
||||
volSlideStatusChanged[k]=true;
|
||||
}
|
||||
volSliding[k]=true;
|
||||
|
|
Loading…
Reference in a new issue