new panning effects (80/81/82)

This commit is contained in:
tildearrow 2022-04-29 23:41:14 -05:00
parent 9c4fed2f4e
commit 2e8634626d
29 changed files with 328 additions and 112 deletions

View file

@ -1025,6 +1025,7 @@ void DivEngine::processRow(int i, bool afterDelay) {
short lastSlide=-1;
bool calledPorta=false;
bool panChanged=false;
// effects
for (int j=0; j<song.pat[i].effectCols; j++) {
@ -1053,8 +1054,25 @@ void DivEngine::processRow(int i, bool afterDelay) {
changePos=effectVal;
}
break;
case 0x08: // panning
dispatchCmd(DivCommand(DIV_CMD_PANNING,i,effectVal));
case 0x08: // panning (split 4-bit)
chan[i].panL=(effectVal>>4)|(effectVal&0xf0);
chan[i].panR=(effectVal&15)|((effectVal&15)<<4);
panChanged=true;
break;
case 0x80: { // panning (linear)
unsigned short pan=convertPanLinearToSplit(effectVal,8,255);
chan[i].panL=pan>>8;
chan[i].panR=pan&0xff;
panChanged=true;
break;
}
case 0x81: // panning left (split 8-bit)
chan[i].panL=effectVal;
panChanged=true;
break;
case 0x82: // panning right (split 8-bit)
chan[i].panR=effectVal;
panChanged=true;
break;
case 0x01: // ramp up
if (song.ignoreDuplicateSlides && (lastSlide==0x01 || lastSlide==0x1337)) break;
@ -1308,6 +1326,10 @@ void DivEngine::processRow(int i, bool afterDelay) {
}
}
if (panChanged) {
dispatchCmd(DivCommand(DIV_CMD_PANNING,i,chan[i].panL,chan[i].panR));
}
if (insChanged && (chan[i].inPorta || calledPorta) && song.newInsTriggersInPorta) {
dispatchCmd(DivCommand(DIV_CMD_NOTE_ON,i,DIV_NOTE_NULL));
}