diff --git a/papers/format.md b/papers/format.md index 54c2c0275..bac66ca29 100644 --- a/papers/format.md +++ b/papers/format.md @@ -363,7 +363,8 @@ size | description 1 | pre note (C64) does not compensate for portamento or legato (>=168) 1 | disable new NES DPCM features (>=183) 1 | reset arp effect phase on new note (>=184) - 3 | reserved + 1 | linear volume scaling rounds up (>=187) + 2 | reserved --- | **speed pattern of first song** (>=139) 1 | length of speed pattern (fail if this is lower than 0 or higher than 16) 16 | speed pattern (this overrides speed 1 and speed 2 settings) diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index c2dea0085..3cb2dce79 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -1873,6 +1873,9 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { if (ds.version<184) { ds.resetArpPhaseOnNewNote=false; } + if (ds.version<187) { + ds.ceilVolumeScaling=false; + } ds.isDMF=false; reader.readS(); // reserved @@ -2409,7 +2412,12 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { } else { reader.readC(); } - for (int i=0; i<3; i++) { + if (ds.version>=187) { + ds.ceilVolumeScaling=reader.readC(); + } else { + reader.readC(); + } + for (int i=0; i<2; i++) { reader.readC(); } } @@ -5494,7 +5502,8 @@ SafeWriter* DivEngine::saveFur(bool notPrimary, bool newPatternFormat) { w->writeC(song.preNoteNoEffect); w->writeC(song.oldDPCM); w->writeC(song.resetArpPhaseOnNewNote); - for (int i=0; i<3; i++) { + w->writeC(song.ceilVolumeScaling); + for (int i=0; i<2; i++) { w->writeC(0); }