fix playSub strategy

properly handle nested playSubs
fixes #174
This commit is contained in:
tildearrow 2022-02-20 23:03:42 -05:00
parent 9068b7013b
commit 18c5867d9c
1 changed files with 3 additions and 2 deletions

View File

@ -743,6 +743,7 @@ void DivEngine::getCommandStream(std::vector<DivCommand>& where) {
}
void DivEngine::playSub(bool preserveDrift, int goalRow) {
for (int i=0; i<song.systemLen; i++) disCont[i].dispatch->setSkipRegisterWrites(false);
reset();
if (preserveDrift && curOrder==0) return;
bool oldRepeatPattern=repeatPattern;
@ -767,11 +768,11 @@ void DivEngine::playSub(bool preserveDrift, int goalRow) {
playing=true;
for (int i=0; i<song.systemLen; i++) disCont[i].dispatch->setSkipRegisterWrites(true);
while (playing && curOrder<goal) {
if (nextTick(preserveDrift)) break;
if (nextTick(preserveDrift)) return;
}
int oldOrder=curOrder;
while (playing && curRow<goalRow) {
if (nextTick(preserveDrift)) break;
if (nextTick(preserveDrift)) return;
if (oldOrder!=curOrder) break;
}
for (int i=0; i<song.systemLen; i++) disCont[i].dispatch->setSkipRegisterWrites(false);