add broken speed alternation flag - dev70
This commit is contained in:
parent
afc701b0b9
commit
ac79e7d6af
6 changed files with 44 additions and 9 deletions
|
|
@ -38,8 +38,8 @@
|
|||
warnings+=(String("\n")+x); \
|
||||
}
|
||||
|
||||
#define DIV_VERSION "dev69"
|
||||
#define DIV_ENGINE_VERSION 69
|
||||
#define DIV_VERSION "dev70"
|
||||
#define DIV_ENGINE_VERSION 70
|
||||
|
||||
// for imports
|
||||
#define DIV_VERSION_MOD 0xff01
|
||||
|
|
|
|||
|
|
@ -144,6 +144,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
|
|||
ds.oneTickCut=false;
|
||||
ds.newInsTriggersInPorta=true;
|
||||
ds.arp0Reset=true;
|
||||
ds.brokenSpeedSel=true;
|
||||
|
||||
// 1.1 compat flags
|
||||
if (ds.version>24) {
|
||||
|
|
@ -1067,6 +1068,14 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) {
|
|||
ds.masterVol=2.0f;
|
||||
}
|
||||
|
||||
if (ds.version>=70) {
|
||||
// extended compat flags
|
||||
ds.brokenSpeedSel=reader.readC();
|
||||
for (int i=0; i<31; i++) {
|
||||
reader.readC();
|
||||
}
|
||||
}
|
||||
|
||||
// read instruments
|
||||
for (int i=0; i<ds.insLen; i++) {
|
||||
DivInstrument* ins=new DivInstrument;
|
||||
|
|
@ -1905,6 +1914,12 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) {
|
|||
|
||||
w->writeF(song.masterVol);
|
||||
|
||||
// extended compat flags
|
||||
w->writeC(song.brokenSpeedSel);
|
||||
for (int i=0; i<31; i++) {
|
||||
w->writeC(0);
|
||||
}
|
||||
|
||||
/// INSTRUMENT
|
||||
for (int i=0; i<song.insLen; i++) {
|
||||
DivInstrument* ins=song.ins[i];
|
||||
|
|
|
|||
|
|
@ -1179,14 +1179,24 @@ void DivEngine::nextRow() {
|
|||
if (haltOn==DIV_HALT_PATTERN) halted=true;
|
||||
}
|
||||
|
||||
if (speedAB) {
|
||||
ticks=speed2*(song.timeBase+1);
|
||||
nextSpeed=speed1;
|
||||
if (song.brokenSpeedSel) {
|
||||
if ((song.patLen&1) && curOrder&1) {
|
||||
ticks=((curRow&1)?speed2:speed1)*(song.timeBase+1);
|
||||
nextSpeed=(curRow&1)?speed1:speed2;
|
||||
} else {
|
||||
ticks=((curRow&1)?speed1:speed2)*(song.timeBase+1);
|
||||
nextSpeed=(curRow&1)?speed2:speed1;
|
||||
}
|
||||
} else {
|
||||
ticks=speed1*(song.timeBase+1);
|
||||
nextSpeed=speed2;
|
||||
if (speedAB) {
|
||||
ticks=speed2*(song.timeBase+1);
|
||||
nextSpeed=speed1;
|
||||
} else {
|
||||
ticks=speed1*(song.timeBase+1);
|
||||
nextSpeed=speed2;
|
||||
}
|
||||
speedAB=!speedAB;
|
||||
}
|
||||
speedAB=!speedAB;
|
||||
|
||||
// post row details
|
||||
for (int i=0; i<chans; i++) {
|
||||
|
|
|
|||
|
|
@ -301,6 +301,7 @@ struct DivSong {
|
|||
bool oneTickCut;
|
||||
bool newInsTriggersInPorta;
|
||||
bool arp0Reset;
|
||||
bool brokenSpeedSel;
|
||||
|
||||
DivOrders orders;
|
||||
std::vector<DivInstrument*> ins;
|
||||
|
|
@ -373,7 +374,8 @@ struct DivSong {
|
|||
brokenDACMode(false),
|
||||
oneTickCut(false),
|
||||
newInsTriggersInPorta(true),
|
||||
arp0Reset(true) {
|
||||
arp0Reset(true),
|
||||
brokenSpeedSel(false) {
|
||||
for (int i=0; i<32; i++) {
|
||||
system[i]=DIV_SYSTEM_NULL;
|
||||
systemVol[i]=64;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue