diff --git a/papers/format.md b/papers/format.md index c49337565..3d67a4d4c 100644 --- a/papers/format.md +++ b/papers/format.md @@ -210,7 +210,9 @@ size | description 2 | volume 2 | pitch 1 | depth - 7 | reserved + 3 | reserved + 4 | loop point (>=19) + | - -1 means no loop 2?? | sample data (always 16-bit) # pattern diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index cb0ea2b17..56db13f1b 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -1312,7 +1312,13 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { sample->depth=reader.readC(); // reserved - for (int j=0; j<7; j++) reader.readC(); + for (int j=0; j<3; j++) reader.readC(); + + if (ds.version>=18) { + sample->loopStart=reader.readI(); + } else { + reader.readI(); + } sample->data=new short[sample->length]; reader.read(sample->data,2*sample->length); @@ -1777,9 +1783,10 @@ SafeWriter* DivEngine::saveFur() { w->writeS(sample->vol); w->writeS(sample->pitch); w->writeC(sample->depth); - for (int j=0; j<7; j++) { // reserved + for (int j=0; j<3; j++) { // reserved w->writeC(0); } + w->writeI(sample->loopStart); w->write(sample->data,sample->length*2); } diff --git a/src/engine/engine.h b/src/engine/engine.h index 413abab93..4893d81d1 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -9,8 +9,8 @@ #include #include -#define DIV_VERSION "0.4pre2" -#define DIV_ENGINE_VERSION 18 +#define DIV_VERSION "0.4pre3" +#define DIV_ENGINE_VERSION 19 enum DivStatusView { DIV_STATUS_NOTHING=0, diff --git a/src/engine/sample.h b/src/engine/sample.h index d01b3af33..da337a492 100644 --- a/src/engine/sample.h +++ b/src/engine/sample.h @@ -2,7 +2,7 @@ struct DivSample { String name; - int length, rate; + int length, rate, loopStart; signed char vol, pitch; unsigned char depth; short* data; @@ -15,6 +15,7 @@ struct DivSample { name(""), length(0), rate(32000), + loopStart(-1), vol(0), pitch(0), depth(16),