giga-refactor, part 9
new format saving compatibility flags now part of own struct
This commit is contained in:
parent
9b3e6cea5b
commit
90a9a86e09
99 changed files with 1145 additions and 1047 deletions
|
|
@ -172,56 +172,56 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
|
|||
|
||||
// compatibility flags
|
||||
if (!getConfInt("noDMFCompat",0)) {
|
||||
ds.limitSlides=true;
|
||||
ds.linearPitch=1;
|
||||
ds.loopModality=0;
|
||||
ds.properNoiseLayout=false;
|
||||
ds.waveDutyIsVol=false;
|
||||
ds.compatFlags.limitSlides=true;
|
||||
ds.compatFlags.linearPitch=1;
|
||||
ds.compatFlags.loopModality=0;
|
||||
ds.compatFlags.properNoiseLayout=false;
|
||||
ds.compatFlags.waveDutyIsVol=false;
|
||||
// TODO: WHAT?! geodude.dmf fails when this is true
|
||||
// but isn't that how Defle behaves???
|
||||
ds.resetMacroOnPorta=false;
|
||||
ds.legacyVolumeSlides=true;
|
||||
ds.compatibleArpeggio=true;
|
||||
ds.noteOffResetsSlides=true;
|
||||
ds.targetResetsSlides=true;
|
||||
ds.arpNonPorta=false;
|
||||
ds.algMacroBehavior=false;
|
||||
ds.brokenShortcutSlides=false;
|
||||
ds.ignoreDuplicateSlides=true;
|
||||
ds.brokenDACMode=true;
|
||||
ds.oneTickCut=false;
|
||||
ds.newInsTriggersInPorta=true;
|
||||
ds.arp0Reset=true;
|
||||
ds.brokenSpeedSel=true;
|
||||
ds.noSlidesOnFirstTick=false;
|
||||
ds.rowResetsArpPos=false;
|
||||
ds.ignoreJumpAtEnd=true;
|
||||
ds.buggyPortaAfterSlide=true;
|
||||
ds.gbInsAffectsEnvelope=true;
|
||||
ds.ignoreDACModeOutsideIntendedChannel=false;
|
||||
ds.e1e2AlsoTakePriority=true;
|
||||
ds.fbPortaPause=true;
|
||||
ds.snDutyReset=true;
|
||||
ds.oldOctaveBoundary=false;
|
||||
ds.noOPN2Vol=true;
|
||||
ds.newVolumeScaling=false;
|
||||
ds.volMacroLinger=false;
|
||||
ds.brokenOutVol=true;
|
||||
ds.brokenOutVol2=true;
|
||||
ds.e1e2StopOnSameNote=true;
|
||||
ds.brokenPortaArp=false;
|
||||
ds.snNoLowPeriods=true;
|
||||
ds.disableSampleMacro=true;
|
||||
ds.preNoteNoEffect=true;
|
||||
ds.oldDPCM=true;
|
||||
ds.delayBehavior=0;
|
||||
ds.jumpTreatment=2;
|
||||
ds.oldAlwaysSetVolume=true;
|
||||
ds.compatFlags.resetMacroOnPorta=false;
|
||||
ds.compatFlags.legacyVolumeSlides=true;
|
||||
ds.compatFlags.compatibleArpeggio=true;
|
||||
ds.compatFlags.noteOffResetsSlides=true;
|
||||
ds.compatFlags.targetResetsSlides=true;
|
||||
ds.compatFlags.arpNonPorta=false;
|
||||
ds.compatFlags.algMacroBehavior=false;
|
||||
ds.compatFlags.brokenShortcutSlides=false;
|
||||
ds.compatFlags.ignoreDuplicateSlides=true;
|
||||
ds.compatFlags.brokenDACMode=true;
|
||||
ds.compatFlags.oneTickCut=false;
|
||||
ds.compatFlags.newInsTriggersInPorta=true;
|
||||
ds.compatFlags.arp0Reset=true;
|
||||
ds.compatFlags.brokenSpeedSel=true;
|
||||
ds.compatFlags.noSlidesOnFirstTick=false;
|
||||
ds.compatFlags.rowResetsArpPos=false;
|
||||
ds.compatFlags.ignoreJumpAtEnd=true;
|
||||
ds.compatFlags.buggyPortaAfterSlide=true;
|
||||
ds.compatFlags.gbInsAffectsEnvelope=true;
|
||||
ds.compatFlags.ignoreDACModeOutsideIntendedChannel=false;
|
||||
ds.compatFlags.e1e2AlsoTakePriority=true;
|
||||
ds.compatFlags.fbPortaPause=true;
|
||||
ds.compatFlags.snDutyReset=true;
|
||||
ds.compatFlags.oldOctaveBoundary=false;
|
||||
ds.compatFlags.noOPN2Vol=true;
|
||||
ds.compatFlags.newVolumeScaling=false;
|
||||
ds.compatFlags.volMacroLinger=false;
|
||||
ds.compatFlags.brokenOutVol=true;
|
||||
ds.compatFlags.brokenOutVol2=true;
|
||||
ds.compatFlags.e1e2StopOnSameNote=true;
|
||||
ds.compatFlags.brokenPortaArp=false;
|
||||
ds.compatFlags.snNoLowPeriods=true;
|
||||
ds.compatFlags.disableSampleMacro=true;
|
||||
ds.compatFlags.preNoteNoEffect=true;
|
||||
ds.compatFlags.oldDPCM=true;
|
||||
ds.compatFlags.delayBehavior=0;
|
||||
ds.compatFlags.jumpTreatment=2;
|
||||
ds.compatFlags.oldAlwaysSetVolume=true;
|
||||
|
||||
// 1.1 compat flags
|
||||
if (ds.version>24) {
|
||||
ds.waveDutyIsVol=true;
|
||||
ds.legacyVolumeSlides=false;
|
||||
ds.compatFlags.waveDutyIsVol=true;
|
||||
ds.compatFlags.legacyVolumeSlides=false;
|
||||
}
|
||||
|
||||
// Neo Geo detune is caused by Defle running Neo Geo at the wrong clock.
|
||||
|
|
|
|||
|
|
@ -147,12 +147,12 @@ bool DivEngine::loadFC(unsigned char* file, size_t len) {
|
|||
DivSong ds;
|
||||
ds.tuning=436.0;
|
||||
ds.version=DIV_VERSION_FC;
|
||||
//ds.linearPitch=0;
|
||||
//ds.pitchMacroIsLinear=false;
|
||||
//ds.noSlidesOnFirstTick=true;
|
||||
//ds.rowResetsArpPos=true;
|
||||
ds.pitchSlideSpeed=8;
|
||||
ds.ignoreJumpAtEnd=false;
|
||||
//ds.compatFlags.linearPitch=0;
|
||||
//ds.compatFlags.pitchMacroIsLinear=false;
|
||||
//ds.compatFlags.noSlidesOnFirstTick=true;
|
||||
//ds.compatFlags.rowResetsArpPos=true;
|
||||
ds.compatFlags.pitchSlideSpeed=8;
|
||||
ds.compatFlags.ignoreJumpAtEnd=false;
|
||||
|
||||
// load here
|
||||
if (!reader.seek(0,SEEK_SET)) {
|
||||
|
|
|
|||
|
|
@ -495,7 +495,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si
|
|||
}
|
||||
ds.subsong.clear();
|
||||
|
||||
ds.linearPitch = 0;
|
||||
ds.compatFlags.linearPitch = 0;
|
||||
|
||||
unsigned int pal = 0;
|
||||
|
||||
|
|
@ -2378,7 +2378,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si
|
|||
CHECK_BLOCK_VERSION(3);
|
||||
unsigned int linear_pitch = reader.readI();
|
||||
|
||||
ds.linearPitch = linear_pitch == 0 ? 0 : 1;
|
||||
ds.compatFlags.linearPitch = linear_pitch == 0 ? 0 : 1;
|
||||
|
||||
if (blockVersion >= 2) {
|
||||
int fineTuneCents = reader.readC() * 100;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -219,10 +219,10 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
|
|||
try {
|
||||
DivSong ds;
|
||||
ds.version=DIV_VERSION_IT;
|
||||
ds.noSlidesOnFirstTick=true;
|
||||
ds.rowResetsArpPos=true;
|
||||
ds.ignoreJumpAtEnd=false;
|
||||
ds.pitchSlideSpeed=8;
|
||||
ds.compatFlags.noSlidesOnFirstTick=true;
|
||||
ds.compatFlags.rowResetsArpPos=true;
|
||||
ds.compatFlags.ignoreJumpAtEnd=false;
|
||||
ds.compatFlags.pitchSlideSpeed=8;
|
||||
|
||||
logV("Impulse Tracker module");
|
||||
|
||||
|
|
@ -277,9 +277,9 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
|
|||
}
|
||||
|
||||
if (flags&8) {
|
||||
ds.linearPitch=1;
|
||||
ds.compatFlags.linearPitch=1;
|
||||
} else {
|
||||
ds.linearPitch=0;
|
||||
ds.compatFlags.linearPitch=0;
|
||||
}
|
||||
|
||||
unsigned char globalVol=reader.readC();
|
||||
|
|
@ -1667,7 +1667,7 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
|
|||
for (int i=0; i<(maxChan+32)>>5; i++) {
|
||||
ds.system[i]=DIV_SYSTEM_ES5506;
|
||||
ds.systemFlags[i].set("amigaVol",true);
|
||||
if (!ds.linearPitch) {
|
||||
if (!ds.compatFlags.linearPitch) {
|
||||
ds.systemFlags[i].set("amigaPitch",true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,11 +41,11 @@ bool DivEngine::loadMod(unsigned char* file, size_t len) {
|
|||
DivSong ds;
|
||||
ds.tuning=436.0;
|
||||
ds.version=DIV_VERSION_MOD;
|
||||
ds.linearPitch=0;
|
||||
ds.noSlidesOnFirstTick=true;
|
||||
ds.rowResetsArpPos=true;
|
||||
ds.ignoreJumpAtEnd=false;
|
||||
ds.delayBehavior=0;
|
||||
ds.compatFlags.linearPitch=0;
|
||||
ds.compatFlags.noSlidesOnFirstTick=true;
|
||||
ds.compatFlags.rowResetsArpPos=true;
|
||||
ds.compatFlags.ignoreJumpAtEnd=false;
|
||||
ds.compatFlags.delayBehavior=0;
|
||||
|
||||
int insCount=31;
|
||||
bool bypassLimits=false;
|
||||
|
|
|
|||
|
|
@ -79,12 +79,12 @@ bool DivEngine::loadS3M(unsigned char* file, size_t len) {
|
|||
try {
|
||||
DivSong ds;
|
||||
ds.version=DIV_VERSION_S3M;
|
||||
ds.linearPitch=0;
|
||||
ds.pitchMacroIsLinear=false;
|
||||
ds.noSlidesOnFirstTick=true;
|
||||
ds.rowResetsArpPos=true;
|
||||
ds.ignoreJumpAtEnd=false;
|
||||
ds.pitchSlideSpeed=12;
|
||||
ds.compatFlags.linearPitch=0;
|
||||
ds.compatFlags.pitchMacroIsLinear=false;
|
||||
ds.compatFlags.noSlidesOnFirstTick=true;
|
||||
ds.compatFlags.rowResetsArpPos=true;
|
||||
ds.compatFlags.ignoreJumpAtEnd=false;
|
||||
ds.compatFlags.pitchSlideSpeed=12;
|
||||
|
||||
logV("Scream Tracker 3 module");
|
||||
|
||||
|
|
|
|||
|
|
@ -551,7 +551,7 @@ bool DivEngine::loadTFMv1(unsigned char* file, size_t len) {
|
|||
ds.systemLen=1;
|
||||
|
||||
ds.system[0]=DIV_SYSTEM_YM2612;
|
||||
ds.loopModality=1;
|
||||
ds.compatFlags.loopModality=1;
|
||||
|
||||
unsigned char speed=reader.readCNoRLE();
|
||||
unsigned char interleaveFactor=reader.readCNoRLE();
|
||||
|
|
@ -746,7 +746,7 @@ bool DivEngine::loadTFMv2(unsigned char* file, size_t len) {
|
|||
ds.systemLen=1;
|
||||
|
||||
ds.system[0]=DIV_SYSTEM_YM2612;
|
||||
ds.loopModality=1;
|
||||
ds.compatFlags.loopModality=1;
|
||||
|
||||
unsigned char magic[8]={0};
|
||||
|
||||
|
|
|
|||
|
|
@ -207,12 +207,12 @@ bool DivEngine::loadXM(unsigned char* file, size_t len) {
|
|||
try {
|
||||
DivSong ds;
|
||||
ds.version=DIV_VERSION_XM;
|
||||
//ds.linearPitch=0;
|
||||
//ds.pitchMacroIsLinear=false;
|
||||
ds.noSlidesOnFirstTick=true;
|
||||
ds.rowResetsArpPos=true;
|
||||
ds.ignoreJumpAtEnd=false;
|
||||
ds.pitchSlideSpeed=8;
|
||||
//ds.compatFlags.linearPitch=0;
|
||||
//ds.compatFlags.pitchMacroIsLinear=false;
|
||||
ds.compatFlags.noSlidesOnFirstTick=true;
|
||||
ds.compatFlags.rowResetsArpPos=true;
|
||||
ds.compatFlags.ignoreJumpAtEnd=false;
|
||||
ds.compatFlags.pitchSlideSpeed=8;
|
||||
|
||||
logV("Extended Module");
|
||||
|
||||
|
|
@ -251,7 +251,7 @@ bool DivEngine::loadXM(unsigned char* file, size_t len) {
|
|||
unsigned short totalChans=reader.readS();
|
||||
unsigned short patCount=reader.readS();
|
||||
ds.insLen=(unsigned short)reader.readS();
|
||||
ds.linearPitch=(reader.readS()&1)?1:0;
|
||||
ds.compatFlags.linearPitch=(reader.readS()&1)?1:0;
|
||||
ds.subsong[0]->speeds.val[0]=reader.readS();
|
||||
ds.subsong[0]->speeds.len=1;
|
||||
double bpm=(unsigned short)reader.readS();
|
||||
|
|
@ -304,7 +304,7 @@ bool DivEngine::loadXM(unsigned char* file, size_t len) {
|
|||
for (int i=0; i<(totalChans+31)>>5; i++) {
|
||||
ds.system[i]=DIV_SYSTEM_ES5506;
|
||||
ds.systemFlags[i].set("amigaVol",true);
|
||||
ds.systemFlags[i].set("amigaPitch",(ds.linearPitch==0));
|
||||
ds.systemFlags[i].set("amigaPitch",(ds.compatFlags.linearPitch==0));
|
||||
ds.systemFlags[i].set("volScale",3900);
|
||||
}
|
||||
ds.systemLen=(totalChans+31)>>5;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue