diff --git a/src/engine/platform/gb.cpp b/src/engine/platform/gb.cpp index ea6ad7719..d25cc2118 100644 --- a/src/engine/platform/gb.cpp +++ b/src/engine/platform/gb.cpp @@ -289,6 +289,7 @@ int DivPlatformGB::dispatch(DivCommand c) { chan[c.chan].ins=c.value; if (c.chan!=2) { chan[c.chan].vol=parent->getIns(chan[c.chan].ins)->gb.envVol; + // TODO: also change envelope values } } break; diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index aea9e1f8b..8042e2cde 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -905,8 +905,16 @@ void DivEngine::processRow(int i, bool afterDelay) { break; case 0x07: // tremolo // TODO + // this effect is really weird. i thought it would alter the tremolo depth but turns out it's completely different + // this is how it works: + // - 07xy enables tremolo + // - when enabled, a "low" boundary is calculated based on the current volume + // - then a volume slide down starts to the low boundary, and then when this is reached a volume slide up begins + // - this process repeats until 0700 or 0Axy are found + // - note that a volume value does not stop tremolo - instead it glitches this whole thing up break; case 0x0a: // volume ramp + // TODO: non-0x-or-x0 value should be treated as 00 if (effectVal!=0) { if ((effectVal&15)!=0) { chan[i].volSpeed=-(effectVal&15)*64;