From 3672ceccb74a233570f075a3a59db30911d71e99 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 25 Jan 2022 16:44:21 -0500 Subject: [PATCH] VGM export: write loop point proper channel reset after loop pending!!! --- src/engine/engine.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index ab3d9823..05a916db 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2035,7 +2035,7 @@ void DivEngine::walkSong(int& loopOrder, int& loopRow) { DivPattern* pat[DIV_MAX_CHANS]; for (int i=0; itell(); - loopTick=tickCount; + if (loopOrder==curOrder && loopRow==curRow && ticks==1) { + writeLoop=true; } } if (nextTick()) done=true; @@ -2612,7 +2612,14 @@ SafeWriter* DivEngine::saveVGM() { w->writeS(totalWait); tickCount+=totalWait; } + if (writeLoop) { + writeLoop=false; + loopPos=w->tell(); + loopTick=tickCount; + } } + // end of song + w->writeC(0x66); for (int i=0; itoggleRegisterDump(false); @@ -2625,8 +2632,10 @@ SafeWriter* DivEngine::saveVGM() { w->seek(0x18,SEEK_SET); w->writeI(tickCount); // loop not handled for now + printf("writing loop pos: %d\n",loopPos-0x1c); + printf("writing tick count: %d\n",(int)(tickCount-loopTick)); w->writeI(loopPos-0x1c); - w->writeI(tickCount-loopTick); + w->writeI(tickCount-loopTick-1); remainingLoops=-1; playing=false;