mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-15 17:25:06 +00:00
better compatibility with old GB modules
This commit is contained in:
parent
4c8ff2edb3
commit
943e4e374f
1 changed files with 23 additions and 0 deletions
|
@ -819,6 +819,17 @@ bool DivEngine::load(unsigned char* f, size_t slen) {
|
||||||
ins->gb.soundLen=reader.readC();
|
ins->gb.soundLen=reader.readC();
|
||||||
|
|
||||||
logD("GB data: vol %d dir %d len %d sl %d\n",ins->gb.envVol,ins->gb.envDir,ins->gb.envLen,ins->gb.soundLen);
|
logD("GB data: vol %d dir %d len %d sl %d\n",ins->gb.envVol,ins->gb.envDir,ins->gb.envLen,ins->gb.soundLen);
|
||||||
|
} else if (ds.system==DIV_SYSTEM_GB) {
|
||||||
|
// try to convert macro to envelope
|
||||||
|
if (ins->std.volMacroLen>0) {
|
||||||
|
ins->gb.envVol=ins->std.volMacro[0];
|
||||||
|
if (ins->std.volMacro[0]<ins->std.volMacro[1]) {
|
||||||
|
ins->gb.envDir=true;
|
||||||
|
}
|
||||||
|
if (ins->std.volMacro[ins->std.volMacroLen-1]==0) {
|
||||||
|
ins->gb.soundLen=ins->std.volMacroLen*2;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -878,6 +889,12 @@ bool DivEngine::load(unsigned char* f, size_t slen) {
|
||||||
// ditto
|
// ditto
|
||||||
pat->data[k][1]--;
|
pat->data[k][1]--;
|
||||||
}
|
}
|
||||||
|
if (ds.version<0x12) {
|
||||||
|
if (ds.system==DIV_SYSTEM_GB && i==3 && pat->data[k][1]>0) {
|
||||||
|
// back then noise was 2 octaves lower
|
||||||
|
pat->data[k][1]-=2;
|
||||||
|
}
|
||||||
|
}
|
||||||
// volume
|
// volume
|
||||||
pat->data[k][3]=reader.readS();
|
pat->data[k][3]=reader.readS();
|
||||||
if (ds.version<0x0a) {
|
if (ds.version<0x0a) {
|
||||||
|
@ -888,6 +905,12 @@ bool DivEngine::load(unsigned char* f, size_t slen) {
|
||||||
pat->data[k][3]>>=1;
|
pat->data[k][3]>>=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ds.version<0x12) {
|
||||||
|
if (ds.system==DIV_SYSTEM_GB && i==2 && pat->data[k][3]>0) {
|
||||||
|
// volume range of GB wave channel was 0-3 rather than 0-F
|
||||||
|
pat->data[k][3]=(pat->data[k][3]&3)*5;
|
||||||
|
}
|
||||||
|
}
|
||||||
for (int l=0; l<chan.effectRows; l++) {
|
for (int l=0; l<chan.effectRows; l++) {
|
||||||
// effect
|
// effect
|
||||||
pat->data[k][4+(l<<1)]=reader.readS();
|
pat->data[k][4+(l<<1)]=reader.readS();
|
||||||
|
|
Loading…
Reference in a new issue