From 5bcc3d5d6dbc5c4115686ce62651d95a4dcaf0b7 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 10 Jan 2022 17:04:31 -0500 Subject: [PATCH] absolute C64 filter macros! exclusive to .fur format --- src/engine/platform/c64.cpp | 10 +++++++--- src/gui/gui.cpp | 16 ++++++++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/engine/platform/c64.cpp b/src/engine/platform/c64.cpp index 619ee92c..3d78a5dc 100644 --- a/src/engine/platform/c64.cpp +++ b/src/engine/platform/c64.cpp @@ -26,9 +26,13 @@ void DivPlatformC64::tick() { if (chan[i].std.hadVol) { DivInstrument* ins=parent->getIns(chan[i].ins); if (ins->c64.volIsCutoff) { - filtCut-=((signed char)chan[i].std.vol-18)*7; - if (filtCut>2047) filtCut=2047; - if (filtCut<0) filtCut=0; + if (ins->c64.filterIsAbs) { + filtCut=chan[i].std.vol; + } else { + filtCut-=((signed char)chan[i].std.vol-18)*7; + if (filtCut>2047) filtCut=2047; + if (filtCut<0) filtCut=0; + } updateFilter(); } else { vol=chan[i].std.vol; diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index f3da2868..8f801b68 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -751,7 +751,11 @@ void FurnaceGUI::drawInsEdit() { // volume macro ImGui::Separator(); if (ins->type==DIV_INS_C64 && ins->c64.volIsCutoff) { - ImGui::Text("Relative Cutoff Macro"); + if (ins->c64.filterIsAbs) { + ImGui::Text("Absolute Cutoff Macro"); + } else { + ImGui::Text("Relative Cutoff Macro"); + } } else { ImGui::Text("Volume Macro"); ImGui::SameLine(); @@ -770,7 +774,7 @@ void FurnaceGUI::drawInsEdit() { } } for (int i=0; istd.volMacroLen; i++) { - if (ins->type==DIV_INS_C64 && ins->c64.volIsCutoff) { + if (ins->type==DIV_INS_C64 && ins->c64.volIsCutoff && !ins->c64.filterIsAbs) { asFloat[i]=ins->std.volMacro[i]-18; } else { asFloat[i]=ins->std.volMacro[i]; @@ -782,8 +786,12 @@ void FurnaceGUI::drawInsEdit() { int volMin=0; if (ins->type==DIV_INS_C64) { if (ins->c64.volIsCutoff) { - volMin=-18; - volMax=18; + if (ins->c64.filterIsAbs) { + volMax=2047; + } else { + volMin=-18; + volMax=18; + } } } ImGui::PlotHistogram("##IVolMacro",asFloat,ins->std.volMacroLen,0,NULL,volMin,volMax,ImVec2(400.0f*dpiScale,200.0f*dpiScale));