dev84 - new compat flag and store macro modes
This commit is contained in:
parent
fc8a130c71
commit
b8c790bf79
3
TODO.md
3
TODO.md
|
@ -1,8 +1,7 @@
|
|||
# to-do for 0.6pre1
|
||||
|
||||
- panning macro
|
||||
- single macro for hard-panned chips
|
||||
- two macros for soft-panned ones
|
||||
- QSound?
|
||||
- pitch macro
|
||||
- relative mode
|
||||
- test
|
||||
|
|
|
@ -42,8 +42,8 @@
|
|||
#define BUSY_BEGIN_SOFT softLocked=true; isBusy.lock();
|
||||
#define BUSY_END isBusy.unlock(); softLocked=false;
|
||||
|
||||
#define DIV_VERSION "dev83"
|
||||
#define DIV_ENGINE_VERSION 83
|
||||
#define DIV_VERSION "dev84"
|
||||
#define DIV_ENGINE_VERSION 84
|
||||
|
||||
// for imports
|
||||
#define DIV_VERSION_MOD 0xff01
|
||||
|
|
|
@ -990,6 +990,9 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) {
|
|||
ds.ignoreDACModeOutsideIntendedChannel=true;
|
||||
ds.e1e2AlsoTakePriority=false;
|
||||
}
|
||||
if (ds.version<84) {
|
||||
ds.newSegaPCM=false;
|
||||
}
|
||||
ds.isDMF=false;
|
||||
|
||||
reader.readS(); // reserved
|
||||
|
@ -1334,7 +1337,12 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) {
|
|||
reader.readC();
|
||||
reader.readC();
|
||||
}
|
||||
for (int i=0; i<23; i++) {
|
||||
if (ds.version>=84) {
|
||||
ds.newSegaPCM=reader.readC();
|
||||
} else {
|
||||
reader.readC();
|
||||
}
|
||||
for (int i=0; i<22; i++) {
|
||||
reader.readC();
|
||||
}
|
||||
}
|
||||
|
@ -2274,7 +2282,8 @@ SafeWriter* DivEngine::saveFur(bool notPrimary) {
|
|||
w->writeC(song.sharedExtStat);
|
||||
w->writeC(song.ignoreDACModeOutsideIntendedChannel);
|
||||
w->writeC(song.e1e2AlsoTakePriority);
|
||||
for (int i=0; i<23; i++) {
|
||||
w->writeC(song.newSegaPCM);
|
||||
for (int i=0; i<22; i++) {
|
||||
w->writeC(0);
|
||||
}
|
||||
|
||||
|
|
|
@ -482,6 +482,27 @@ void DivInstrument::putInsData(SafeWriter* w) {
|
|||
w->writeC(ws.param2);
|
||||
w->writeC(ws.param3);
|
||||
w->writeC(ws.param4);
|
||||
|
||||
// other macro modes
|
||||
w->writeC(std.volMacro.mode);
|
||||
w->writeC(std.dutyMacro.mode);
|
||||
w->writeC(std.waveMacro.mode);
|
||||
w->writeC(std.pitchMacro.mode);
|
||||
w->writeC(std.ex1Macro.mode);
|
||||
w->writeC(std.ex2Macro.mode);
|
||||
w->writeC(std.ex3Macro.mode);
|
||||
w->writeC(std.algMacro.mode);
|
||||
w->writeC(std.fbMacro.mode);
|
||||
w->writeC(std.fmsMacro.mode);
|
||||
w->writeC(std.amsMacro.mode);
|
||||
w->writeC(std.panLMacro.mode);
|
||||
w->writeC(std.panRMacro.mode);
|
||||
w->writeC(std.phaseResetMacro.mode);
|
||||
w->writeC(std.ex4Macro.mode);
|
||||
w->writeC(std.ex5Macro.mode);
|
||||
w->writeC(std.ex6Macro.mode);
|
||||
w->writeC(std.ex7Macro.mode);
|
||||
w->writeC(std.ex8Macro.mode);
|
||||
}
|
||||
|
||||
DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) {
|
||||
|
@ -954,6 +975,29 @@ DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) {
|
|||
ws.param4=reader.readC();
|
||||
}
|
||||
|
||||
// other macro modes
|
||||
if (version>=84) {
|
||||
std.volMacro.mode=reader.readC();
|
||||
std.dutyMacro.mode=reader.readC();
|
||||
std.waveMacro.mode=reader.readC();
|
||||
std.pitchMacro.mode=reader.readC();
|
||||
std.ex1Macro.mode=reader.readC();
|
||||
std.ex2Macro.mode=reader.readC();
|
||||
std.ex3Macro.mode=reader.readC();
|
||||
std.algMacro.mode=reader.readC();
|
||||
std.fbMacro.mode=reader.readC();
|
||||
std.fmsMacro.mode=reader.readC();
|
||||
std.amsMacro.mode=reader.readC();
|
||||
std.panLMacro.mode=reader.readC();
|
||||
std.panRMacro.mode=reader.readC();
|
||||
std.phaseResetMacro.mode=reader.readC();
|
||||
std.ex4Macro.mode=reader.readC();
|
||||
std.ex5Macro.mode=reader.readC();
|
||||
std.ex6Macro.mode=reader.readC();
|
||||
std.ex7Macro.mode=reader.readC();
|
||||
std.ex8Macro.mode=reader.readC();
|
||||
}
|
||||
|
||||
return DIV_DATA_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -323,6 +323,7 @@ struct DivSong {
|
|||
bool sharedExtStat;
|
||||
bool ignoreDACModeOutsideIntendedChannel;
|
||||
bool e1e2AlsoTakePriority;
|
||||
bool newSegaPCM;
|
||||
|
||||
DivOrders orders;
|
||||
std::vector<DivInstrument*> ins;
|
||||
|
@ -404,7 +405,8 @@ struct DivSong {
|
|||
gbInsAffectsEnvelope(true),
|
||||
sharedExtStat(true),
|
||||
ignoreDACModeOutsideIntendedChannel(false),
|
||||
e1e2AlsoTakePriority(false) {
|
||||
e1e2AlsoTakePriority(false),
|
||||
newSegaPCM(true) {
|
||||
for (int i=0; i<32; i++) {
|
||||
system[i]=DIV_SYSTEM_NULL;
|
||||
systemVol[i]=64;
|
||||
|
|
|
@ -166,6 +166,10 @@ void FurnaceGUI::drawCompatFlags() {
|
|||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6");
|
||||
}
|
||||
ImGui::Checkbox("New SegaPCM features (macros and better panning)",&e->song.newSegaPCM);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6");
|
||||
}
|
||||
}
|
||||
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_COMPAT_FLAGS;
|
||||
ImGui::End();
|
||||
|
|
Loading…
Reference in a new issue