dev139 - groove patterns!

This commit is contained in:
tildearrow 2023-02-05 02:56:39 -05:00
parent ace2142286
commit ac5986e44f
13 changed files with 483 additions and 98 deletions

View file

@ -400,11 +400,22 @@ void DivEngine::processRow(int i, bool afterDelay) {
if (effectVal==-1) effectVal=0;
switch (effect) {
case 0x09: // speed 1
if (effectVal>0) speed1=effectVal;
case 0x09: // select groove pattern/speed 1
if (song.grooves.empty()) {
if (effectVal>0) speeds.val[0]=effectVal;
} else {
if (effectVal<(short)song.grooves.size()) {
speeds=song.grooves[effectVal];
curSpeed=0;
}
}
break;
case 0x0f: // speed 2
if (effectVal>0) speed2=effectVal;
case 0x0f: // speed 1/speed 2
if (speeds.len==2 && song.grooves.empty()) {
if (effectVal>0) speeds.val[1]=effectVal;
} else {
if (effectVal>0) speeds.val[0]=effectVal;
}
break;
case 0x0b: // change order
if (changeOrd==-1 || song.jumpTreatment==0) {
@ -1071,6 +1082,9 @@ void DivEngine::nextRow() {
}
if (song.brokenSpeedSel) {
unsigned char speed2=(speeds.len>=2)?speeds.val[1]:speeds.val[0];
unsigned char speed1=speeds.val[0];
if ((curSubSong->patLen&1) && curOrder&1) {
ticks=((curRow&1)?speed2:speed1)*(curSubSong->timeBase+1);
nextSpeed=(curRow&1)?speed1:speed2;
@ -1079,14 +1093,10 @@ void DivEngine::nextRow() {
nextSpeed=(curRow&1)?speed2:speed1;
}
} else {
if (speedAB) {
ticks=speed2*(curSubSong->timeBase+1);
nextSpeed=speed1;
} else {
ticks=speed1*(curSubSong->timeBase+1);
nextSpeed=speed2;
}
speedAB=!speedAB;
ticks=speeds.val[curSpeed]*(curSubSong->timeBase+1);
curSpeed++;
if (curSpeed>=speeds.len) curSpeed=0;
nextSpeed=speeds.val[curSpeed];
}
// post row details