diff --git a/papers/format.md b/papers/format.md index 8a1f8c7a..25990f1b 100644 --- a/papers/format.md +++ b/papers/format.md @@ -32,6 +32,8 @@ these fields are 0 in format versions prior to 100 (0.6pre1). the format versions are: +- 123: Furnace dev123 +- 122: Furnace dev122 - 121: Furnace dev121 - 120: Furnace dev120 - 119: Furnace dev119 @@ -1096,7 +1098,11 @@ size | description | - 9: BRR (SNES) | - 10: VOX | - 16: 16-bit PCM - 3 | reserved + 1 | loop direction (>=123) or reserved + | - 0: forward + | - 0: backward + | - 0: ping-pong + 2 | reserved 4 | loop start | - -1 means no loop 4 | loop end diff --git a/src/engine/engine.h b/src/engine/engine.h index 510ef23a..5c3aa12e 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -47,8 +47,8 @@ #define BUSY_BEGIN_SOFT softLocked=true; isBusy.lock(); #define BUSY_END isBusy.unlock(); softLocked=false; -#define DIV_VERSION "dev122" -#define DIV_ENGINE_VERSION 122 +#define DIV_VERSION "dev123" +#define DIV_ENGINE_VERSION 123 // for imports #define DIV_VERSION_MOD 0xff01 #define DIV_VERSION_FC 0xff02 diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index fdc216ac..19508f4c 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -2383,11 +2383,15 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { if (isNewSample) { sample->centerRate=reader.readI(); sample->depth=(DivSampleDepth)reader.readC(); + if (ds.version>=123) { + sample->loopMode=(DivSampleLoopMode)reader.readC(); + } else { + sample->loopMode=DIV_SAMPLE_LOOP_FORWARD; + } // reserved reader.readC(); reader.readC(); - reader.readC(); sample->loopStart=reader.readI(); sample->loopEnd=reader.readI(); @@ -4624,9 +4628,9 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) { w->writeI(sample->rate); w->writeI(sample->centerRate); w->writeC(sample->depth); + w->writeC(sample->loopMode); w->writeC(0); // reserved w->writeC(0); - w->writeC(0); w->writeI(sample->loop?sample->loopStart:-1); w->writeI(sample->loop?sample->loopEnd:-1); diff --git a/src/engine/sample.h b/src/engine/sample.h index b0a9e8ac..9fa11abf 100644 --- a/src/engine/sample.h +++ b/src/engine/sample.h @@ -106,10 +106,9 @@ struct DivSample { DivSampleDepth depth; bool loop; // valid values are: - // - 0: No loop - // - 1: Forward loop - // - 2: Backward loop - // - 3: Pingpong loop + // - 0: Forward loop + // - 1: Backward loop + // - 2: Pingpong loop DivSampleLoopMode loopMode; // these are the new data structures.